#include #include #include #include #include // !指针函数 /* * 函数指针 * C语言允许将函数的地址存储在指针变量中,这种指针称为函数指针。函数指针可以指向任何符合特定签名的函数。 * 例如,int (*func_ptr)(int, int) 表示一个指向接受两个int参数并返回int的函数的指针。 * 函数指针的声明和使用 * 1.声明函数指针 * int (*func_ptr)(int, int); * 这表示func_ptr是一个指向接受两个int参数并返回int的函数的指针。 * 函数指针是一种数据类型,可以像其他指针一样使用。 * 函数指针变量不能进行算术运算,这是与数组指针变量不同的。数组指针变量加减一个整数可使指针移动,指向数组的其他元素,而函数指针的移动是毫无意义的。 1.动态灵活性 可在运行时动态绑定不同函数,实现同一接口调用不同逻辑(如根据配置选择算法),避免静态代码膨胀。 2.回调机制支持 便于实现回调函数(如事件监听、异步处理),使代码结构更松耦合,增强模块间交互能力。 3.函数作为数据存储 可将函数存入数组、结构体等数据结构,方便批量管理或按条件调度(如状态机、菜单系统)。 4.简化复杂逻辑 在算法(如排序、搜索)中通过函数指针传递比较规则,避免为不同规则重复编写代码,提升复用性。 5.底层编程优势 在操作系统、驱动开发等场景中,可直接操作函数地址,实现动态链接、热更新等底层功能。 */ // 普通函数:加法 int add(int a, int b) { return a + b; } // 普通函数:乘法 int multiply(int a, int b) { return a * b; } int main() { // 声明函数指针,指向返回int、参数为(int, int)的函数 int (*op)(int, int); // 动态赋值为加法函数 op = add; printf("5 + 3 = %d\n", op(5, 3)); // 输出:8 // 动态切换为乘法函数 op = multiply; printf("5 * 3 = %d\n", op(5, 3)); // 输出:15 return 0; }