<分析>:
int f(int );
int (*pf)(int) = &f;---pf是函数指针,指向函数f
(1)函数指针和普通指针一样,必须先被初始化为指向某个函数的指针,然后才能使用;
(2)函数指针与所指向的函数必须返回类型和形参都精确匹配;
(3)初始化的时候,&是可选的,因为函数名在使用的时候编译器总会把它转换为函数指针,所以以下三个表达式结果是相同的:
int ans; ans = f(25); ans=(*pf)(25); ans = pf(25);
(4)函数指针可以用来实现回调函数和转移表;
(5)回调函数:一个指向回调函数的指针作为参数传递给另一个函数,后者使用这个指针调用回调函数, 用void类 型去定义回调函数,这样可以实现通用型函数(不同类型),类的成员函数不可以作为回调函数;
(6)转移表:像switch语句一样执行选择,由一个函数指针数组组成,这些函数具有相同的原型,函数 通过下标选择某个指针,再通过指针调用对应的函数。
(7)当函数指针作为函数形参的时候,可以写成指针类型,也可以写成函数类型。
形参为函数类型:
voiduseBigger(const string &, const string &, bool(const string&,conststring&));
形参为函数指针类型:
voiduseBigger(const string &, const string &, bool(*)(const string&,conststring&));
(8)当函数指针作为函数的返回值时,只能写成函数指针类型,而不能写成函数类型:
int (*ff(int))(int*,int)
---ff是一个函数,带有一个参数int,它的返回类型是一个函数指针,该函数指针指向的函数返回类型为int型,参数为int*和int;
(9)c++容许使用函数指针指向重载函数,但是指针类型必须与重载函数精确匹配。