您的位置:首页 > 其它

关于函数指针

2015-11-13 18:54 387 查看

定义

函数指针是指向函数的指针变量。因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整形变量(int),字符型(char),数组([])一样,这里指向函数。C在编译时,每个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可饮用其他类型变量一样,在这些概念上是大体一致的。
函数指针有2个用途:调用函数 和 做函数的参数。

声明方法

函数指针的声明方法为:
返回值类型(*指针变量名)([形参列表]);
注:指针变量名中的括号不能省!因为括号改变了运算符的优先级。若省略了,就变成一个函数说明了。
int func(int x);//这里声明了一个函数
int (*f)(int x);//这里才是声明了一个函数指针,参数为int,返回值类型也是int
f = func;//将func函数的首地址赋给指针f
f = &func;//跟上面的效果一样
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,隐刺经过赋值以后,指针f就指向函数func(x)的代码首地址。

Example

//typedef int(*ptr)(int,int);
int (*ptr)(int,int);
int a,b,c;
ptr = max;
scanf("%d%d",&a,&b);
//c = (*ptr)(a,b);
c = ptr(a,b);
printf("a = %d,b = %d,max = %d",a,b,c);


注释部分都一样
其中 max = 0x011a11f0 max(int,int)
ptr    = 0x011a11f0 max(int,int)
*ptr 
 = 0x011a11f0 max(int,int)
一样!!

cocos2dx里的函数指针

typedef CCLayer* (*NEWTESTFUNC)();
#define CF(className) create##className
static NEWTESTFUNC createFunctions[] = {CF(ActionManual)};
分析:
以上,数组createFunctions里存的是一系列的函数而已,或者
9aaf
说函数指针,没带参数
CF(ActionManual) 的类型就是NEWTESTFUNC,一个返回类型为CCLayer*,参数为空的函数指针——NEWTESTFUNC
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: