指针函数与函数指针的区别
2016-03-08 19:48
253 查看
1、指针函数
指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针。
类型标识符 *函数名(参数)
int
*f(x,y);
首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。
表示:
float
*fun();
float
*p;
p
= fun(a);
注意指针函数与函数指针表示方法的不同,千万不要混淆。最简单的辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。
来讲详细一些吧!请看下面
2.函数指针
函数指针是指向函数的指针变量,即本质是一个指针变量。int
(*f) (int x); /* 声明一个函数指针 */
f=func;
/* 将func函数的首地址赋给指针f
*/
指向函数的指针包含了函数的地址,可以通过它来调用函数。声明格式如下:
类型说明符 (*函数名)(参数)
其实这里不能称为函数名,应该叫做指针的变量名。这个特殊的指针指向一个返回整型值的函数。指针的声明必须和它指向函数的声明保持一致。
指针名和指针运算符外面的括号改变了默认的运算符优先级。如果没有圆括号,就变成了一个返回整型指针的函数的原型声明。
例如:
void (*fptr)();
把函数的地址赋值给函数指针,可以采用下面两种形式:
fptr=&Function;
fptr=Function;
取地址运算符&不是必需的,因为单单一个函数标识符就标号表示了它的地址,如果是函数调用,还必须包含一个圆括号括起来的参数表。
可以采用如下两种方式来通过指针调用函数:
x=(*fptr)();
x=fptr();
第二种格式看上去和函数调用无异。但是有些程序员倾向于使用第一种格式,因为它明确指出是通过指针而非函数名来调用函数的。下面举一个例子:
void (*funcp)(); void FileFunc(), EditFunc(); main() { funcp=FileFunc; (*funcp)(); funcp=EditFunc; (*funcp)(); } void FileFunc() { printf("FileFunc\n"); } void EditFunc() { printf("EditFunc\n"); }程序输出为:
FileFunc
EditFunc
3.总结
主要的区别是:一个是函数,一个是指针变量。在使用在必须要搞清楚才能正确使用。相关文章推荐
- C++中的seekg函数
- Delphi的TService的輸入桌面切換(服务程序)(windows登录界面如何截图)(使用了OpenDesktop和GetThreadDesktop等API)
- 【足迹C++primer】46、动态存储类
- windows10的激活及SQL Server 2008 的安装
- 自我介绍 看了构建之法这本书有什么问题?
- 滴滴打车架构
- poj1127
- BeanUtils注册数据转化类型
- Jquery使用ajax以及angularjs 动态模板加载并进行渲染
- 子线程中更新主线程中的UI
- jsp与servlet的传值问题
- 合唱队形
- iOS开发之HTTP、TCP/IP、Socket
- oracle 通过父类查找子类 prior
- 【ZYNQ-7000开发之十四】Vivado HLS和OpenCV_上
- 解决thinkphp在不支持pathinfo的nginx上的问题
- python脚本工具-1 制作爬虫下载网页图片
- Cocos2d-x之lambda表达式的使用
- Codeforces A. Again Twenty Five!【水】
- BeanUtils工具包