1、指向函数的指针
对于一个函数只能做两件事情:调用它,或是取得它的地址。
可以取得函数的地址并赋值给指向函数的指针,并在以后使用这个指针调用该函数。
void fun(int num)
{
cout << num << endl;
}
void (*pfun)(int num);//pfun此时就是一个函数指针
int main()
{
int value = 100;
pfun = &fun;//获得函数fun的地址
pfun(value);//等价于调用 fun(value);
//取地址运算符&可以不要;
pfun = fun;
pfun(value);//也是等价于调用 fun(value);
return 0;
}
指向函数的指针的声明中也需要给出参数类型和返回值类型。指向函数的指针只能被参数类型和返回值类型都一样的函数赋值。
比如:
void (*pfun)(string);
void f1(string){}
int f2(string) {}
void f3(int){}
pfun = f1;//正确
pfun = f2;//不正确,返回值类型不同
pfun = f3;//不正确,参数类型不同
2、指向函数的指针的数组
typedef void (*PF)();
PF edit_opts[] = {&f1, &f2, &f3};//edit_opts就是指向函数指针的数组,数组里面每个元素的类型都是void (*PF)();