函数也可以作为参数传递给其他的函数,传递的是函数的地址,函数的地址就是函数名.
申明函数指针
和申明指向某种数据类型的指针一样,申明函数指针时,也必须指定指针指向的函数类型,这就意味着申明应指定函数的返回类型和函数的形参列表.如有如下函数:
double* fun(int a, int b);
则申明指向上述函数的函数指针应如下:
double* (*pfun)(int a,int b);
仔细比较可知,两个申明的方式一样,只是fun
和(*pfun)
的区别,因为fun
是函数,则(*pfun)
也是函数,若(*pfun)
是函数,那么pfun
就是函数指针了.
使用函数指针
因为(*pfun)
就表示的是函数,所以就可以直接当做函数名来用,所以下列用法是一样的:
double* ans1 = fun(a,b);
pfun = fun; // pfun指向fun函数
double* ans2 = (*pfun)(a,b); // 使用函数指针调用fun函数
事实上,C++也运行直接像使用函数那样使用函数指针,所以,下面的用法也是可以的:
double* ans2 = pfun(a,b);
使用typedef简化
typedef的作用就是创建一个类型的别名.typedef也可以简化相应的函数指针;如:
typedef double* (*pfun)(int a, int b);
pfun fun1 = f1;
pfun fun2 = f2;
```