函数指针指向的是函数而非对象,和其他指针一样,函数指针指向某种特定类型,函数的类型由它的返回类型和形参类型共同决定,与函数名无关。

bool LengthCompare(const string &,const string &)

该函数的类型是bool(const string& ,const string&)。想要声明一个指向改函数的指针,只需要用指针特换函数名即可:

bool (*pf)(const string&, const string&);//未初始化

process(fun); // 传址
process(fun()); //传值

double pam (int);
double (*pf) (int); // pf是一个指向函数的指针
注意:pam()的特征标和返回类型必须与pf相同
函数原形:estimate(int lines, double (*pf) (int));
使用: edtimate(50, pam);
使用:double x = pam(4);
double y = (*pf) (5);
c++: double y = pf(5);

例子

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int maxx(int a, int b)
{
return a > b ? a : b;
}

int add(int a, int b)
{
return a + b;
}

int sub(int a, int b)
{
return a - b;
}

int mul(int a, int b)
{
return a * b;
}

int dev(int a, int b)
{
return a / b;
}

int proc(int(*p)(int, int), int a, int b)
{
int ret = (*p)(a, b);
return ret;
}
int main()
{
int num = proc(add, 2, 3);
printf("add: %d\n", num);

num = proc(sub, 2, 3);
printf("sub: %d\n", num);

num = proc(mul, 2, 3);
printf("mul: %d\n", num);

num = proc(dev, 2, 3);
printf("dev: %d\n", num);

return 0;

}