函数指针

这是什么玩意?

函数不是数据,但它与变量有两点相通之处:一是它也有类型(返回类型),二是它也有地址(入口地址)。

函数的地址也可作为指针的值,这就是函数指针

怎么用?

函数指针的说明格式与函数的原型相似,主要区别是:原来的“函数名”用“(*函数指针名)”替代。例如:

int(*pf)(float);

其中pf是一个函数指针变量。由于对函数指针pf的说明中已规定了函数的返回类型和参数表,因此,函数指针pf只能指向这类函数。

int f_float(float);
int f_float_2(float);
int f_char(char);

int (*pf_1)(float) = &f_float;// 合法
pf_1 = & f_float_2;// 合法
int (*pf_2)(char) = &f_float;// 不合法
int (*pf_3)(float) = &f_char;// 不合法

讲了这么多,函数指针有什么用呢?

C++语言本身不允许把函数作为参数。然而有了函数指针就可以通过函数指针起到把函数作为参数的作用。

例如,用来计算函数定积分的函数simpson(),对于不同的函数计算其定积分值应有一个“被积函数”参数,那怎么把被积函数作为参数呢?函数指针这时候就派上用场了:

float simpson(float a, float b, float(*pf)(float));

其中参数a、b给出定积分的上下限,函数指针pf则指向被积函数

float a = 3.0, b = 5.0;// 上下限
float f1(float){...}// 被积函数1
float f1(float){...}// 被积函数2
float (*pf)(float) = &f1;// 函数指针pf指向被积函数f1
cout << simpson(a, b, pf) << endl;// 求函数f1在(35)区间内的定积分
pf = &f2;// 函数指针pf指向被积函数f2
cout << simpson(a, b, pf) << endl;// 求函数f2在(35)区间内的定积分
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值