指向函数的指针变量的一个重要用途是把函数的地址作为参数传递到其他函数
书上给的例8.24将函数指针作为函数fun的形参,用于接收主函数传的实参(实参为函数名funx),这样使函数调用别的函数的时候,是把别的函数名作为函数的参数进行调用,符合结构化程序设计中的模块化设计原则,体现了模块的独立性,即使用一个模块完成一项功能,耦合性少。
在主函数中调用fun函数,函数fun没有改变,改变的只是实参的函数名。
这个fun函数就可以用于编写一个通用函数实现各种专用的功能。
下面给出定积分的通用函数float integral(float a,float b,float(*fun)(float,float));
这个和定积分关系不大,一个函数式罢了。然后编写不同的fun2,fun3...实现2x+3,e^x+1..函数功能。
这样,这个函数指针体现了一种总结,概括函数的功能,为主函数提供函数入口
/*
8.5指向函数的指针
8.5.4用指向函数的指针做函数参数
编写一个求定积分的通用函数
求1+x对于x在a到b的积分
2x+3
e^x+1
(1+x)^2
x^3
*/
#include <stdio.h>
void main()
{
#if 1
float integral(float a,float b,float(*fun)(float,float));
float fun1(float a,float b);
register int n=1,a=1,b=2;
float result;
if(n==1) result=integral(a,b,fun1);
printf("%f",result);
#else
#endif
}
float fun1(float a,float b)
{
float x1=a,x2=b,y1,y2,y;
y1=x1+1/2.0*x1*x1;
y2=x2+1/2.0*x2*x2;
y=y2-y1;
return y;
}
float integral(float a,float b,float(*fun)(float,float))
{
float result=(*fun)(a,b);
return result;
}