关于函数指针
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
相关文章推荐
- iptables扫盲!!!
- 快学Scala读书笔记之 Chapter 8(继承)
- Android如何获取手机各项信息
- WebService
- APP 截图
- Sublime Text有哪些使用技巧(转)
- RSAProtectedConfigurationProvider加密web.config
- (学习笔记)android 5.0 系统去电流程状态判断(下)
- 各种排序总结
- TarJan 算法求解有向连通图强连通分量
- 通过wireshark获取应用接口并使用爬虫爬取网站数据(三)
- Android IBinder的linkToDeath介绍
- DataProtectionConfigurationProvider加密web.config文件
- 阶乘因子和
- 任务栏显示桌面没有了
- 浅谈C++容器(六)
- java中数组赋值
- 最新的Hibernate(hibernate-release-5.0.2.Final)里配置proxool连接池详细步骤
- MyEclipse + Maven开发Web工程的配置
- 浅谈C++容器(五)