函数的指针指的是一个函数在编译时被分配的入口地址,这个地址被称为该函数的指针。可以用一个指针变量存放函数的指针,从而让该指针变量指向一个函数。然后,可以通过指针变量调用该函数。指向函数的指针变量与前面介绍的指针变量不同。
1.指向函数的指针变量
指向函数的指针变量的定义格式如下:
指向函数的指针变量的定义举例如下:
注意:在定义格式中,“(*指针变量)”中的括号不能省略,因为后面介绍的“返回指针值的函数”在定义时不需要加括号,两者容易混淆。
为指向函数的指针变量赋值的方式如下:
函数名代表该函数的入口地址。从上面格式看出:可以省略函数名前的符号&,直接用函数名给指向函数的指针变量赋值。但是,函数名后不能带括号和参数。例如:
在上面语句中,语句“int(*pf)(int x,int y);”定义了指向函数的指针变量pf,语句“pf=fun;”表示将函数fun在内存中的入口地址赋值给指向函数的指针变量pf,从而使pf指向fun。
指向函数的指针变量的调用格式如下:
若使用指向函数的指针调用上面的fun函数,则调用语句如下:
注意:对于指向函数的指针变量p,类似p+i、p++、p--等运算没有意义。
2.通过函数指针变量来调用函数(www.daowen.com)
例8.16 分析下面程序中的指针变量的使用情况。
程序代码如下:
【分析】在程序中,函数fun的作用是统计字符数组中英文字母的个数。主函数中定义了指向函数的指针变量pf,使用语句“pf=fun;”让pf指向函数fun,这样,(*pf)等价于fun,使用语句“n=(*pf)(tring);”相当于使用“n=fun(tring);”调用了fun。
3.函数指针作函数的参数
在例8.16中,通过使用语句“pf=fun;”让指向函数的指针变量pf指向函数fun,用语句“n=(*pf)(tring);”代替“n=fun(tring);”,从而实现间接访问。指向函数的指针变量还有一个重要的应用,就是将它用作参数。这时需要函数名作实参。
例8.17 已知切比雪夫多项式定义如下:
请输入n(正整数)和x(实数),计算切比雪夫多项式的值。
下面用指向函数的指针变量作为函数的参数来完成运算。
程序代码如下:
【分析】该程序在main函数中调用函数cheby,传递给函数cheby的实参可以是函数名f1或f2或f3或f4,将函数f1或f2或f3或f4的入口地址传递给函数cheby的形参f。函数cheby的形参f是指向函数的指针变量,f接受实参传来的函数f1或f2或f3或f4的入口地址之后,执行语句“result=(*f)(x);”,调用函数f1或f2或f3或f4完成计算。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。