函数指针引用
① 用函数指针指向要调用的函数,并进行调用,此题运行会出错。
这题出的有问题!
在最新版本的C/C++编译中是编译不通过的!(也许老版本的编译器支持!)
因为f1(double) 和f2(double,double)参数个数不同,所以函数指针定义这样写是不对的。
你若想编译通过,只能定义两个指针
#include<stdio.h>
doublef1(doublex)
{returnx*x;}
doublef2(doublex,doubley)
{returnx*y;}
doublefun(doublea,doubleb)
{
/**********found**********/
double(*fa)(double);//一个参数的
double(*fb)(double,double);//两个参数的
doubler1,r2;
/**********found**********/
fa=f1;//修改f=fa
r1=fa(a);//修改f=fa
/**********found**********/
fb=f2;//修改f=fb
r2=(*fb)(a,b);//修改f=fb
returnr1+r2;
}
main()
{
doublex1=5,x2=3,r;
r=fun(x1,x2);
printf(" x1=%f,x2=%f,x1*x1+x1*x2=%f ",x1,x2,r);
}
② 当函数参数使用引用传参时,怎样通过函数指针来调用它呢
typedef int (*pfn)(int &,int &);
pfn Max=max;
int a=0,b=1;
Max(a,b);
这样有错吗?
③ 如何通过函数指针调用函数
一般需要定义一个函数指针类型
typedef int (*function_pointer_t) ( int arg1, int arg2 );
然后,定义函数指针变量
function_pointer_t fp_invoker = 0;
函数指针可以动态改变内容,改变调用对象,假设有两个函数
int function_sum( int arg1, int arg2 )
{
return arg1+arg2;
}
int function_sub( int arg1, int arg2 )
{
return arg1-arg2;
}
注意到两个函数的原型与函数指针类型是一致的。以下是调用
fp_invoker = function_sum; // 直接用函数名赋值即可
fp_invoker(1,2); // 调用时,可以认为函数指针便是函数名,此时调用加法
fp_invoker = function_sub; // 同理,切换到减法
fp_invoker(1,2); // 调用减法
以上都是直观的用法,通常函数指针用于回调,即下层函数先将函数指针内容保存起来,处理结束后,再调用。此时要注意首先检查函数指针内容是否为空。
if( fp_invoker ){
fp_invoker( arg1, arg2 );
}
④ 如何引用作用域外的函数指针
先在头文件声明函数,然后在cpp中实现时,声明一个Class A类型的变量,比如是m,然后调用m.AWndProc()
⑤ 在C语言中,指向函数的指针怎么调用函数
其实,函数指针确实不是“指向函数的指针”
函数指针,就是函数指针,加不加*没有实际意义。
二楼的那个:
c=(*p)(a,b);
也可以写成
c=(****************************************************p)(a,b);
或者
c=p(a,b);
你说它指向什么?
PS,加*有特殊的用途,初学者就算了