关于函数指针

定义

函数指针是指向函数的指针变量。因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整形变量(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里存的是一系列的函数而已,或者说函数指针,没带参数
CF(ActionManual) 的类型就是NEWTESTFUNC,一个返回类型为CCLayer*,参数为空的函数指针——NEWTESTFUNC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值