博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++函数指针
阅读量:5075 次
发布时间:2019-06-12

本文共 1645 字,大约阅读时间需要 5 分钟。

 

写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文!

本博客全网唯一合法URL:http://www.cnblogs.com/acm-icpcer/p/6693942.html

 

 

C++函数指针

 

C++中的函数指针是一个很重要但是很令人头疼的东西,往往很容易忘记它的语法和用法,有的时候会因为一点点小细节而导致编译不通过。那么,本着巩固基础的目的,我写了这篇总结文章。

 

1.首先,明确基本语法:

 

数据类型 (* 函数指针名字)(形参列表)

例如:void (*pf)();

这个语句定义了一个名为pf的指向void类型的、没有形参的函数

 

如果要让我们定义好的这个函数指针指向一个指定类型的函数(例如:void hello(){cout<<"hello"<<endl;}),那么应该这样:

pf=&hello;

也可以写成“pf=hello;”。因为函数名字本身就代表一个地址,c++为了照顾一些老鸟级程序员所以保留了“pf=&hello;”语法类型。

 

那么综合以上知识我们写出第一个测试程序:

#include<iostream>

using namespace std;

 

void hello()

{

    cout<<"hello"<<endl;

}

 

int main()

{

    void (*pf)();//define a function pointer which refers to a void function

    pf=&hello;//"pf=hello" is also ok

    (*pf)();

}

输出为:hello

 

2.函数指针的形式参数问题:

 

我们已经知道了基本语法是:数据类型 (* 函数指针名字)(形参列表)

如果碰到有形参,甚至形参还不止一个的函数,怎么定义它的指针呢?

例如,对于函数:

int inc(int x)

{
  return x+1;
}

可以这样写:

int (*p_inc)(int x)=inc;

或者这样写:

int (*p_inc)(int)=inc;

相对的,要调用就这样:

cout<<(*p_inc)(1)<<endl;

就会显示结果为2.

 

同理,对于有多个参数的函数,例如:

int adder(double x,long y)

{
  return x+y;
}

可以这样写:

int (*p_adder)(double,long)=adder;

cout<<(*p_adder)(1,1)<<endl;

结果显示为2。

 

3.一般,老鸟们为了简化c++函数指针的语法,喜欢用typedef:

 

typedef最基本的用法是给数据类型起一个你自己喜欢的别名

例如:typedef int A;那么之后你就可以在程序中用“A”来替代“int”了

那么,处于简化函数指针语法的目的,比如,对于1中的:void (* pf)();

一般会这样写:

typedef void (*PF)();

那么之后在使用的时候,只要

PF pf;

pf=hello;

即可以啦。

 

同理。对于2中的指针,我们改为:

typedef int (*P_Adder)(double,long);

P_Adder p_adder=adder;

 

那么,综合文中这所有的基础知识,我们就得到了一个归纳性的程序:

#include
using namespace std;typedef int A;typedef void (*PF)();typedef int (*P_Adder)(double,long);void hello(){ cout<<"hello"<

 

 

 

 

TZ

2017/4/11于华中农业大学

 

转载于:https://www.cnblogs.com/acm-icpcer/p/6693942.html

你可能感兴趣的文章
proxy写监听方法,实现响应式
查看>>
第一阶段冲刺06
查看>>
十个免费的 Web 压力测试工具
查看>>
EOS生产区块:解析插件producer_plugin
查看>>
mysql重置密码
查看>>
jQuery轮 播的封装
查看>>
一天一道算法题--5.30---递归
查看>>
JS取得绝对路径
查看>>
排球积分程序(三)——模型类的设计
查看>>
python numpy sum函数用法
查看>>
php变量什么情况下加大括号{}
查看>>
linux程序设计---序
查看>>
【字符串入门专题1】hdu3613 【一个悲伤的exkmp】
查看>>
C# Linq获取两个List或数组的差集交集
查看>>
HDU 4635 Strongly connected
查看>>
ASP.NET/C#获取文章中图片的地址
查看>>
Spring MVC 入门(二)
查看>>
格式化输出数字和时间
查看>>
页面中公用的全选按钮,单选按钮组件的编写
查看>>
java笔记--用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程
查看>>