你这里是一个函数指针作为参数
先来看看函数指针的概念
函数指针的含义
函数指针即指向函数地址的指针。利用该指针可以知道函数在内存中的位置。因此也可以利用函数指针调用函数。
函数指针的定义方法:
<类型> (* <函数名>)(......)
例如:
int (*func)( )
这里,func就是一个函数指针。
注意:int *func( )和int (*func)( )的区别
int *func( ); //这是返回一个整型指针的函数
int (*func)( ); //这是一个函数指针
2、函数指针的使用方法
函数指针即该指针指向的是一个函数的地址。也就是说,它的值只能是代码区中的一个地址。因此不能将其它存储区域的变量地址赋给函数指针。
例4.5.22假定有下面的函数声明
int ptr;
int fn(int);
int (*fp)(int);
指出下面的语句是否合法?,为什么?。
fp=fn; //正确,将函数fn的地址赋给fp
fp=fn(5); //错误,返回给fp的结果不是一个函数地址。
fp=&ptr; // 错误,ptr的地址不在程序代码区,两种数据类型不能转换。
从上面的例子可以看出:
(1) 不能将普通变量的地址赋给函数指针;
(2) 不能将函数的调用赋给函数指针
(3) 可以将函数名赋给一个函数指针
3、 函数指针用作函数参数
例4.5.23 看下面程序的运行结果
#include <iostream.h>
#include <math.h>
double sigma(double (*func)(double),double dl,double du)
{
double dt=0.0;
for (double d=dl;d<du;d+=0.1)
dt+=func(d);
return dt;
}
void main( )
{
double dsum;
dsum=sigma(sin,0.1,1.0);
cout<<"the sum of sin from 0.1 to 1.0 is "<<dsum<<endl;
dsum=sigma(cos,0.5,3.0);
cout<<"the sum of cos from 0.5 to 3.0 is "<<dsum<<endl;
}
结果是:
the sum of sin from 0.1 to 1.0 is 5.01388
the sum of cos from 0.5 to 3.0 is -2.44645
从上面的程序可以看出,利用函数指针可以对函数间接调用。