c++ 函数指针

void (*funcPtr) ();

funcPtr是一个函数指针,它所指向的函数无参无返回值。

*funcPtr一定要用括号括起来,否则“void *funcPtr();”会被编译器看做是一个函数声明,返回值为void *。

有时候函数指针可能被定义的很复杂,以至于很难看清其具体类型。想要准确分析出一个复杂的函数指针定义,最好的办法是从“变量名”开始,以“先右后左”的方式向外扩展分析。

float (*(*fp)(int, int, float)) (int);

首先fp右边什么也没有,左边是*,且*fp以括号括起来,所以fp是一个函数指针。再向右看“(int, int, float)”,所以fp指向的函数有三个参数,类型分别是int、int、float。再向左看,左边是*,此时可以把(*fp)(int, int, float)提出来,剩下float (*) (int);,也就是fp指向的函数返回值,仍然是一个函数指针,这个函数指针指向的函数有一个int类型的参数,返回值类型为float。

void * (*(*fp1)(int))[10];

fp1是一个函数指针,所指向的函数有一个int类型的参数。此时可以把(*fp1)(int)提出来,剩下void * (*)[10];,可以看出fp1所指向的函数的返回值是一个指针,此指针指向一个含有10个void指针的数组(void * [10])。

int (*(*f2())[10]) ();

f2右边是(),所以f2不是一个函数指针,它只是一个普通的函数声明。函数f2无参,返回值是一个指针(int (*(*)[10]) ();),该指针指向含有10个函数指针的数组(int (* [10]) ();)。数组中的这些函数指针,所指向的函数无参,返回值类型为int。

可以使用typedef定义函数指针类型,以缩短复杂的函数指针定义。

typedef double (*(*(*fp3)())[10])();
fp3 a;

fp3是一个函数指针类型,该类型的函数指针所指向的函数无参,并返回一个指针(double (*(*)[10])()),该指针指向含有10个函数指针的数组(double (* [10])()),数组中的这些函数指针所指向的函数无参,返回值类型为double。a是函数指针类型fp3的一个变量,它是fp3类型的函数指针。

在实际使用中,通常不会遇到如此复杂的函数指针定义。

【学习资料】 《Thinking In C++》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值