C++函数指针
函数指针的声明
returnType (*pointerName)(parameterType1,parameterType2,...);
//returnType 是函数的返回类型
//pointerName 是函数指针的名称
//parameterType1,parameterType2 等是函数的形参类型
//注意,这里形参类型不一定需要提供形参名
无形参类型
int (*funcPtr)();
有形参类型
int (*sum_Ptr)(int,int);//int类型形参
void (*show_Ptr)(const char*);//char*类型形参
使用typedef简化函数指针的声明
typedef int(*def_func_ptr)();//typedef简化函数声明
def_func_ptr func();//使用简化后的声明来定义函数指针
函数指针的使用
#include<iostream>
int add(const int a,const int b){
return a+b;
}
int main(int argc,char* argv[]){
//声明一个函数指针,指向add函数
int (*addPtr)(const int,const int) = add;
//需要保证传入实参与函数形参列表相符
const int a = 3;
const int b = 4;
//为函数指针传参
int result = addPtr(a,b);
std::cout<<result<<std::endl;
}
重载函数的指针
当存在有重载函数时,函数指针的匹配遵循精确匹配原则
void ff(int*);
void ff(unsigned int);
//定义了两个重载函数
void (*pf1)(unsigned int) = ff;//根据精确匹配原则,函数指针指向第二个ff函数
void (*pf2)(int) = ff;//错误,并没有合适的重载函数与之配对
int *(*pf3)(int*) = ff;//错误,虽然形参类型一致,但返回类型不同