函数指针介绍
函数指针指向的是函数而非对象, 函数的类型由它的返回类型和形参类型共同决定。
int func(int, int); // 函数声明
int (*pf)(int, int); // pf是一个函数指针,但是未初始化
pf = func; // 对pf进行初始化
int res = pf(2, 3); // 像调用函数一样,使用函数指针
函数指针做形参
形参可以是指向函数的指针。 例如:
void print(int pf(int, int)); // pf会自动转换为指向函数的指针
void print(int (*pf)(int, int)); // 显式是定义一个函数指针,与第一个函数等价
如果觉得上述的声明太过复杂, 可以给对应的函数指针定义类型别名:
typedef int (*PF)(int, int);
void print(PF pf);
返回指向函数的指针
如果要返回函数指针,必须显示的将返回类型指定为指针。有几种函数声明方式如下:
// 直接声明一个返回函数指针的函数
int (*f1(int))(int, int); // f1是函数名, 形参有一个int, 返回类型是一个函数指针
// 使用尾置返回类型声明
auto f1(int) -> int(*)(int, int)
// 使用类型别名
typedef int(*PF)(int, int);
PF f1(int);