程序员对一个函数只能够做两件事:一是调用它,二是获取它的地址。通过获取一个函数的地址而得到的指针,可以在后面用于调用这个函数。
例如:
void error(string s) {/* ...... */}
void (*efct)(string); //指向函数的指针。
void f()
{
efct = &error; //efct指向函数error
efct("error"); //通过函数指针调用error函数
}
在上面的例子中,编译器知道efct是一个函数指针,并回去调用被指的函数。因此,可以不写从指针得到函数的间接操作符*,类似的,取得函数的地址也可以不写&运算符。
在指向函数的指针声明时也需要给出参数的类型,跟函数的声明一样。在指针赋值时,必须完整的和函数类型相匹配。