【解惑】函数名与函数指针

   今天在学习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。

转载于:https://www.cnblogs.com/ljhero/archive/2011/03/14/1984173.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值