西耶娜盖尔利沉默是你:【解惑】函数名与函数指针
来源:百度文库 编辑:九乡新闻网 时间:2024/04/27 14:33:23
今天在学习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。
【解惑】函数名与函数指针
函数与函数指针
《彻底搞定C指针》第7篇 函数名与函数指针
函数指针和指针函数
返回指针的函数
深入理解指针函数
p_get_frame_total函数指针【x264】
p_get_frame_total函数指针
声明函数指针并实现回调
Excel函数参数与函数应用
MATCH 函数(查找与引用函数)
HYPERLINK 函数(查询与引用函数)
ACOSH 函数 (三角与数学函数)
ASINH 函数 (三角与数学函数)
ATAN 函数 (三角与数学函数)
ATAN2 函数 (三角与数学函数)
ATANH 函数 (三角与数学函数)
COMBIN 函数 (三角与数学函数)
COS 函数 (三角与数学函数)
COSH 函数 (三角与数学函数)
DEGREES 函数 (三角与数学函数)
EVEN 函数 (三角与数学函数)
EXP 函数 (三角与数学函数)
FACT 函数 (三角与数学函数)