打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【解惑】函数名与函数指针
userphoto

2011.03.31

关注
 今天在学习linux下c程序设计时,看到函数指针时,在书上看到一个例子如下:
1 int get_max(int i, int j, int k, int (*pt)(int,int))
2 {
3 int ret;
4
5 ret = pt(i,j);
6 // ret = (*pt)(i,j);
7
8 return ret;
9 }

  没接触过,函数指针可以这样用,第一感觉应该是第六行所示的使用方式;怀疑是其书写错误,后来在实际在电脑上测试了下,结果是正确的,这两种方式都能成功运行。。。。。

   又去翻了K&R求证一下,并没提到用函数指针名直接调用函数这种方式。自己也开始纠结了,自己接着又对程序调试了一番,看下pt与*pt的值是否一样,如期待的那样是一样的,不一样程序肯定不能正确运行,看来是编译器在编译的时候对函数指针变量pt与*pt是做相同值处理,pt就等于*pt;

  最后在网上看到一篇好文,详细的讲述了函数名与函数指针的关系。

    原文:《彻底搞定C指针-函数名与函数指针

void MyFun(int x);    //这个申明也可写成:void MyFun( int );
void (*FunP)(int );   //也可申明成void(*FunP)(int x),但习惯上一般不这样。

结论:

1. 其实,MyFun的函数名与FunP函数指针都是一样的,即都是函数指针。MyFun函数名是一个函数指针常量,而FunP是一个函数数指针变量,这是它们的关系。
2. 但函数名调用如果都得如(*MyFun)(10);这样,那书写与读起来都是不方便和不习惯的。所以C语言的设计者们才会设计成又可允许MyFun(10);这种形式地调用(这样方便多了并与数学中的函数形式一样,不是吗?)。
3. 为统一起见,FunP函数指针变量也可以FunP(10)的形式来调用。
4. 赋值时,即可FunP=&MyFun形式,也可FunP=MyFun。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
深入理解C语言函数指针
委托和事件的综合总结
《C语言程序设计(第2版)》第11章指针进阶
C语言
高级指针话题-函数指针
boost库 bind/function的使用 [大三四八九月实习]
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服