C/C++中的指针可以指向一个函数,也叫函数指针。
注:函数返回值是指针的叫指针函数,中心词在后面,即函数指针其实质是一个指针,指针函数其实质是函数。

还是以实例说话,下面的例子进行加减乘除运算。

/*compute函数的第三个参数是一个函数指针,这里的calculate是一个变量,其存储的是函数地址,你可以将具有相同签名的函数名传递给calculate*/
double compute(double x, double y, double (*calculate) (double, double))
{
return calculate(x, y);
}

double add(double x, double y)
{
return x + y;
}

double subtract(double x, double y)
{
return x - y;
}

double multiply(double x, double y)
{
return x * y;
}

double divide(double x, double y)
{
if (0 == y)
{
throw invalid_argument("Attempted division by zero");
}
return x / y;
}

int main()
{
double x = 10;
double y = 2;
/*这里的add是一个函数,直接传递函数名就好。这里就将add传递给了calculate*/
double result = compute(x, y, add);
cout << result << endl;
return 0;
}

运行结果是12。

指针函数的定义:返回值 (*函数名) (参数列表)
像上面的指针函数定义:double (*calculate) (double, double)

我们可以使用typedef简化指针函数的书写如下:

/*虽然和前面的形式比较像,但是这里的FunctionCalculate是类型名称,和前面例子中的calculate不一样,前面的calculate是一个变量*/
typedef double (*FunctionCalculate) (double, double);

/*这里的fun变量相当于前面的calculate变量*/
double compute(double x, double y, FunctionCalculate fun)
{
return fun(x, y);
}

//调用形式还是一样的
int main()
{
double x = 10;
double y = 2;
double result = compute(x, y, add);
cout << result << endl;
return 0;
}