函数指针
函数指针指向的是函数而非对象。和其他指针一样,函数指针指向某种特定类型。函数的类型由它的返回值和形参共同决定,与函数名无关。
函数指针声明方法:
函数类型(*指针变量名)(形参列表)
函数类型指:函数返回值类型,"(*指针变量名)"中括号不能省,若省略则为一个返回数据类型为指针的函数。例如:
bool func(string a);//函数声明
bool (*pf)(string a);//指针函数声明。pf指向一个函数。该函数的形参为string类型,返回值类型为bool类型。
bool *pf(string a );//pf是一个返回值为bool指针的函数
使用函数指针
当我们把函数名作为一个值使用时,该函数自动转换成指针。
pf=func;//pf指名为func的函数
pf=&func;//等价的赋值语句
调用,下列3中调用方法等价
bool b1=pf("hello");
bool b2=(*)pf("hello");
bool b3=func("hello");
在指向不同函数类型的指针之间不存在转换规则。但可为函数指针赋值为nullptr或0,表示没有指向任何一个函数。
string::size_type=func2(string b);
bool func3(char *);
pf=func2//错,返回类型不同
pf=func3//错, 形参类型不同
pf=func1//对。返回类型和形参类型匹配
pf=0;//对。pf不指向任何函数
重载函数的指针
使用重载函数必须明确的指出选用哪个函数。
double f(int *);
double f(unsigned int);
double (*pf1)(int *)=f//对
void (*pf2)(int *)=f//错 返回类型不同
double (*pf)(int)=f//错