c++允许对指向函数的指针进行操作。它的一个重要使用是把一个函数作为参数传给另一个函数。
声明一个函数指针像声明一个函数原型一样,不过函数名前面插个符号 * ,然后用()扩起来。
#include <iostream>
#include <string>
using namespace std
int addition (int a, int b)
{return (a + b) ;}
int subtraction (int a, int b)
{return (a - b) ;}
int operation(int x, int y, int (*func)(int ,int))
{
int g;
g = (*func)(x, y);
return g;
}
int main()
{
int m, n;
int (*mins)(int, int) = subtraction;
m = operation(7, 5, addition);
n = operation(20, m, mins);
cout<<n<<' ';
return 0;
}
输出:8
上面的例子中,mins是指向函数的指针,有两个 int 类型的参数,它被直接初始化指向 subtraction :
int (*mins)(int, int) = subtraction;
这里实际是在定义一个指针变量,这个指针的名字叫做mins,这个指针的类型是指向一个函数,函数的类型是有两个整型参数并返回一个整型值。
整句话 “int (*mins)(int, int) = subtraction;” 是定义了这样一个指针并把函数subtraction的值赋给它。也就是说有了这个定义后mins就代表了函数subtraction。
因此括号中的两个int 实际只是一种变量类型的声明,也就是说是一种形式参数而不是实际参数。