Files

57 lines
1.6 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <stdbool.h>
// !指针函数
/*
* 函数指针
* 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;
}