指向函数的指针

指针不仅可以指向数据,也可以指向函数,假设编写了integrated的函数用来求a和b点之间的函数f的积分。我们希望函数integrate通过传递f作为实际参数的方式变得更为通用

函数integrate的原型如下:

double integrate( double (*f)(double),double a, double b);

*f周围的圆括号说明f是个指向函数的指针,而不是函数的返回值为指针,把f声明成好像就是函数也是合法的

double integrate( double f(double),double a, double b);

编译器看来,这种原型和前一种形式是完全一样


在调用函数integrate时,把一个函数名作为第一个实际参数,如:

result = integrate(sin,0,0,PI/2);

sin后边没有圆括号,当函数名后边没有圆括号时,c语言编译器会产生指向函数的指针来代替产生函数调用的代码,在此例中不是在调用函数sin,二十给函数integrate传递了一个指向函数sin的指针,和c语言处理数组一样,如果a是数组的名字,a[i]就表示数组的一个元素,而a本身作为指向数组的指针,类似,如果f是函数,那么c语言把f(x)当成函数的调用来处理,而f本身则是指向函数的指针

integrate函数体内,可以调用f所指向的函数:例如:sum += (*f)(x);

c语言对待指向函数的指针就像对待指向数据的指针一样,我们可以把函数指针存储在变量中,或者用作数组的元素

void (*pf)(int) pf可以指向任何返回void以以一个int为参数的函数

函数指针数组有很大的用途, 例如正在编写的程序用来显示用户选择格式的命令菜单,可以编写函数实现这些命令,

void (*file_cmd[])(void) = {new_cmd,open_cmd,close_cmd,save_cmd}


再例如:

int (*s[10]) (int) 定义函数指针数组

float (**def)[10] :def 是一个二级指针,它指向的是一个一维数组的指针,数组的元素都是float

double *(*gh)[10];,gh是一个指针,它指向一个一维数组,它的元素都是double *的

double (*f[10])( ); :f是一个数组,f有10个元素,元素都是函数的指针,指向的函数类型都是没有参数,返回double类型的数据

int *(*b)[10]



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值