93c16edb5a
- 修正主README.md中的所有路径引用,使其与当前文件结构一致 - 更新翁凯C语言学习指南链接路径 - 更新五子棋AI项目文档链接路径 - 更新数据结构学习文档链接路径 - 修正编译说明和学习模块使用指南中的目录路径 - 改进五子棋README.md的编译运行说明,增加Windows和Linux/macOS的分平台指导 - 确保所有文档链接和路径引用都能正确工作
57 lines
1.6 KiB
C
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;
|
|
} |