函数指针是存储函数入口地址的变量,用于回调、策略切换等;声明格式为返回类型 (*指针名)(参数列表),可赋函数名或取地址初始化,调用方式同普通函数,常作为参数传递、存入数组或容器,并可用typedef/using简化声明。

函数指针就是指向函数的指针变量,它存储的是函数在内存中的入口地址。用它可实现回调、策略切换、事件分发等灵活逻辑。
声明和初始化函数指针
声明格式:返回类型 (*指针名)(参数列表);注意括号不能省,否则变成函数声明。
例如,有一个加法函数:
int add(int a, int b) {
return a + b;
}对应函数指针可以这样声明并初始化:
立即学习“C++免费学习笔记(深入)”;
int (*func_ptr)(int, int) = add; // 直接赋函数名(不加括号) // 或显式取地址 int (*func_ptr2)(int, int) = &add;
通过函数指针调用函数
调用方式和普通函数一样,支持两种写法(效果完全相同):
func_ptr(3, 5)(*func_ptr)(3, 5)
推荐第一种,更简洁直观。
作为参数传递给其他函数
这是函数指针最常见用途之一,比如实现通用计算函数:
int calc(int x, int y, int (*op)(int, int)) {
return op(x, y);
}
// 使用
int result = calc(10, 4, add); // 得到 14
int result2 = calc(10, 4, [](int a, int b) { return a * b; }); // C++11 起也可传 lambda(需转成匹配类型)
数组和容器中存多个函数指针
可以定义函数指针数组,实现操作映射表:
int sub(int a, int b) { return a - b; }
int mul(int a, int b) { return a * b; }
int (*ops[])(int, int) = {add, sub, mul};
int res = ops[1](8, 3); // 调用 sub → 5
也可用 std::vector 存储(需统一类型):
std::vectorop_list = {add, sub, mul};
使用 typedef 或 using 简化声明
避免重复写冗长语法:
typedef int (*BinaryOp)(int, int); // 或 C++11 起推荐 using BinaryOp = int(*)(int, int);BinaryOp op = add; int r = op(7, 2);










