今天我们来学c语言的指针函数
函数指针顾名思义,是一个指向函数的指针
基本写法
类型名 (*函数指针)(指向函数的类型);
现在我举一个小学二年级就学过的定积分示范一下如何使用函数指针
#include<stdio.h>
#include<math.h>
//因为f2要用到三角函数,这里需要调用math.h
double calc(double(*funp)(double),double a,double b){
return (b-a)/2.0*(funp(a)+funp(b));
}
//这里用梯形公式计算定积分,第一个形参就是一个函数指针
//如果没有这个函数指针,calc的形参不能直接写具体函数,那么就得把梯形公式放到每个函数里面,就比较麻烦
//所以引用函数指针可以省很多事
//只需要把具体函数的地址传给funp,就可以反复套用定积分计算公式
double f1(double x){
return x*x;
}
double f2(double x){
return sin(x)/x;
}
double (*funp)(double);
int main(void)
{
double a,b;
double result;
printf("此代码用梯形公式计算定积分\n");
printf("请输入定义域左边:");
scanf("%lf",&a);
printf("\n");
printf("请输入定义域右边:");
scanf("%lf",&b);
//下面给大家介绍函数内以函数指针为形参的两种用法
//第一种用法直接传具体函数f1,这里传入的函数在c语言中会自动转换为函数的地址,然后计算定积分
result=calc(f1,a,b);
printf("此定义域内第一个函数的定积分:%.4f\n",result);
//第二种方法是先将具体函数f2的地址传给funp,再调用calc计算定积分
funp=f2;
result=calc(funp,a,b);
printf("此定义域内第二个函数的定积分:%.4f\n",result);
return 0;
}
继续学