c++函数指针
定义函数指针
定义一个指针指向一个无参数无返回值的函数
void (*funcPtr)();
大多数申明都是以右-左-右动作的方式工作
针对复杂的定义,最好处理方式是从中间开始向外扩展.
“中间开始”(“funcPtr是一个…”),向右(没有东西,被括号挡住了),向左发现”*”(“…指针指向一个…”),向右发现空参数列表(“…没有带参数的函数…”),
向左发现void(“funcPtr是一个指针,它指向一个不带参数并返回void的函数)
这里funcPtr需要括号是避免混淆 有void 指针
void funcPtr(); //一个返回void指针的函数,而不是一个变量
复杂定义
void * (*(*fp1)(int))[10];
float (*(*fp2)(int,int,float))(int);
typedef double (*(*(*fp3)())[10])();
fp3 a;
int (*(*fp4())[10])();
- fp1 是一个指向函数的指针,接受int参数,返回一个指向含有10个void指针数组的指针
- fp2 是一个指向函数的指针,该函数接受int,int,double,返回一个指向函数的指针,该函数接受int,返回float
- fp3 指向函数的指针,该函数无参数,返回一个指向含有10个指向函数指针数组的指针,这些函数不接受参数且返回double 又定义a是ftp3类型的一个
- fp4 是一个返回指针的函数,改指针指向含有10个函数指针的数组,这些函数返回整型值
使用函数指针
函数func()的地址 就是func 或者使用更加明显的语法&func()
void (*fp)() = func;
指向函数的指针数组
#define DF(N) void N() { cout << "function " #N" called..." <<endl; }
DF(a);DF(b);DF(c);
void (*func_table[])() = {a,b,c};
引用
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 yangbenbo@whu.edu.cn
文章标题:c++函数指针
本文作者:杨本泊
发布时间:2019-11-16, 16:51:52
最后更新:2023-07-09, 07:10:11
原始链接:http://yangbenbo.github.io/2019/11/16/c-函数指针/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。