函数指针是C++中用于存储函数地址并调用函数的变量,支持回调机制与动态调用。其定义需匹配目标函数的返回类型和参数列表,语法为:返回类型 (指针名)(参数列表)。例如,对于int add(int a, int b),可定义为int (funcPtr)(int, int) = add;通过funcPtr(3, 4)或(funcPtr)(3, 4)调用。常用于策略模式与通用计算函数,如int compute(int x, int y, int (operation)(int, int)) { return operation(x, y); },传入不同函数实现多态行为。使用typedef可简化声明,如typedef int (*MathFunc)(int, int),提升代码可读性。尽管现代C++倾向std::function与lambda,函数指针在底层及C兼容场景仍具重要价值。

函数指针是C++中一种指向函数的指针变量,它能存储函数的地址,并通过该指针调用函数。使用函数指针对实现回调机制、函数表、动态调用等非常有用。
函数指针的定义
函数指针的定义需要与目标函数的返回类型和参数列表完全匹配。语法格式如下:
返回类型 (*指针名)(参数列表)例如,有一个函数:
int add(int a, int b) {return a + b;
}
对应的函数指针可以这样定义:
立即学习“C++免费学习笔记(深入)”;
int (*funcPtr)(int, int);这表示funcPtr是一个指向接受两个int参数并返回int的函数的指针。
函数指针的赋值与调用
将函数名(不带括号)赋给函数指针即可完成绑定:
funcPtr = add;也可以在定义时直接初始化:
int (*funcPtr)(int, int) = add;通过函数指针调用函数有两种方式:
- funcPtr(3, 4);
- (*funcPtr)(3, 4);
两种写法效果相同,推荐使用第一种,更简洁直观。
实际应用场景示例
函数指针常用于实现策略选择或回调。比如编写一个通用的计算函数:
int compute(int x, int y, int (*operation)(int, int)) {return operation(x, y);
}
然后传入不同的函数指针:
int result1 = compute(5, 3, add);int result2 = compute(5, 3, subtract); // 假设 subtract 已定义
这种方式让compute函数具有灵活性,无需修改内部逻辑就能支持多种运算。
使用typedef简化函数指针声明
原始的函数指针语法较繁琐,可用typedef简化:
typedef int (*MathFunc)(int, int);之后就可以这样使用:
MathFunc func = add;int result = func(2, 3);
代码更清晰,尤其在频繁使用函数指针时优势明显。
基本上就这些。掌握函数指针有助于理解高级C++编程中的很多设计模式和系统接口。虽然现代C++更多使用std::function和lambda,但在底层开发或兼容C的场合,函数指针仍不可替代。











