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;//错误,虽然形参类型一致,但返回类型不同