函数指针
来源:互联网 发布:2016进出口数据 编辑:程序博客网 时间:2024/06/06 08:28
一. 定义:
函数指针是指向函数的指针变量,即本质是一个指针变量。
int func(int); /*声明func函数*/int (*f) (int); /* 声明一个函数指针 */f=func; /* 将func函数的首地址赋给指针f */
二. 函数指针变量的声明:
就象某一数据变量的内存地址可以存储在相应的指针变量中一样,函数的首地址也以存储在某个函数指针变量里的。这样,我就可以通过这个函数指针变量来调用所指向的函数了。
在C系列语言中,任何一个变量,总是要先申明,之后才能使用的。
指向函数的指针包含了函数的地址,可以通过它来调用函数。声明格式如下:
类型说明符 (*函数指针变量名)(参数)
这个特殊的指针指向一个返回整型值的函数。指针的声明必须和它指向函数的声明保持一致。
如在之前看到的,整个函数指针变量f的申明格式如同函数func的申明处一样,只不过——我们把func改成(*f)而已,这样就有了一个能指向func函数的指针f了。(当然,这个f指针变量也可以指向所有其它具有相同参数及返回值的函数了。)
指针名和指针运算符外面的括号改变了默认的运算符优先级。如果没有圆括号,就变成了一个返回整型指针的函数的原型声明。
例如:
int (*fptr)();//函数指针fptr,函数返回整型int * fptr();//函数fptr(),返回指向整型的指针
三. 函数指针的赋值:
把函数的地址赋值给函数指针,可以采用下面两种形式:
fptr=&Function;fptr=Function;取地址运算符&不是必需的,分析如下:
1. 其实,Function的函数名与fptr函数指针都是一样的,即都是函数指针。Function函数名是一个函数指针常量,而fptr是一个函数数指针变量,这是它们的关系。
2. 函数名也可以这样调用(*Function)(10),但这样书写与读起来都是不方便和不习惯的。所以C语言的设计者们才会设计成又可允许Function(10);这种形式地调用(这样方便多了并与数学中的函数形式一样,不是吗?)。
3. 为统一起见,fptr函数指针变量也可以fptr(10)的形式来调用,同时必须包含一个圆括号括起来的参数表。
4. 赋值时,即可FunP=&MyFun形式,也可FunP=MyFun。
四. 函数指针的调用:
可以采用如下两种方式来通过指针调用函数:
x=(*fptr)();x=fptr();第二种格式看上去和函数调用无异。但是有些程序员倾向于使用第一种格式,因为它明确指出是通过指针而非函数名来调用函数的。
参考:http://www.cnblogs.com/gmh915/archive/2010/06/11/1756067.html
http://hi.baidu.com/bellgrade/item/4a4334e8132eed0965db00a6
- 指针函数 函数指针
- 函数指针/指针函数
- 指针函数&函数指针
- 函数指针 指针函数
- 函数指针 指针函数
- 指针函数,函数指针
- 函数指针,指针函数,
- 指针函数,函数指针
- 函数指针 指针函数
- 函数指针、指针函数
- 指针函数&函数指针
- 函数指针 指针函数
- 函数指针 指针函数
- 函数指针&指针函数
- 指针函数 函数指针
- 指针函数 &函数指针
- 函数指针&指针函数
- void指针 函数指针
- Lua中调用 cocos2d-x 的滑动条/滚动条 ScrollView
- 特征脸(Eigenface)理论基础-PCA(主成分分析法)
- 用友NC房地产行业V5.75助力商业地产
- [学习共享] shell 十三問?
- shell编程join
- 函数指针
- ACCESS交叉表(行列互换)
- A的href和onclick
- MIT:算法导论——11.扩充的数据结构、动态有序统计和区间树
- Histogram intersection(直方图交叉核,Pyramid Match Kernel)
- maven cargo tomcat7 远程部署
- gcc 的ar命令
- 转载:Oracle创建表空间、创建用户以及授权、查看权限
- 45_leetcode_SubsetsII