Initial commit: C language learning code
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user