函数指针数组可实现动态调用与回调机制,如菜单系统中通过索引调用对应函数:定义funcptr数组存储add、sub函数地址,利用下标0或1调用相应函数,实现运行时根据条件选择执行逻辑。

在C++中,函数指针数组是一种强大的工具,能够实现动态调用和回调机制。它允许程序在运行时根据条件选择并执行不同的函数,广泛应用于事件处理、插件系统、状态机等场景。
函数指针的基本概念
函数指指针指向函数的入口地址,可以通过指针调用函数。定义方式如下:
// 定义一个函数指针类型
typedef int (*FuncPtr)(int, int);
<p>// 示例函数
int add(int a, int b) { return a + b; }
int sub(int a, int b) { return a - b; }</p><p>// 使用函数指针
FuncPtr ptr = add;
int result = ptr(3, 4); // 调用add(3, 4)</p>函数指针的类型必须与目标函数的返回值和参数列表完全匹配。
函数指针数组的定义与初始化
将多个函数指针组织成数组,可实现批量管理和动态索引调用。
// 定义函数指针数组
FuncPtr funcArray[] = {add, sub};
<p>// 调用数组中的函数
int result1 = funcArray[0](5, 3); // 调用add
int result2 = funcArray[1](5, 3); // 调用sub</p>数组元素是函数名(即函数地址),编译器会自动转换为对应类型的指针。
实现函数回调机制
函数指针数组常用于实现回调。例如,在菜单系统中,每个选项对应一个函数:
void save() { cout // 回调函数指针数组
void (*menuActions[])() = {save, open, exitApp};<p>// 动态调用
int choice = 1;
if (choice >= 0 && choice </p>这种结构解耦了用户输入与具体操作,便于扩展和维护。
结合std::function实现更灵活的调用
C++11引入的std::function支持更通用的可调用对象,包括普通函数、lambda、绑定表达式等。
#include <functional>
#include <vector><p>using Callback = std::function<void>;
std::vector<callback> callbacks;</callback></void></p>
<p>callbacks.push_back([](){ cout </p>
<p>// 调用
for (auto& cb : callbacks) {
if (cb) cb();
}</p></vector></functional>注意:lambda捕获列表或不同签名需统一包装,否则无法存入同一容器。
基本上就这些。掌握函数指针数组,能让你写出更灵活、模块化的C++代码。尤其在需要运行时决策调用哪个函数时,这种技巧非常实用。不复杂但容易忽略细节,比如类型匹配和数组越界检查。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!










