C语言 - 回调函数
在C语言中,回调函数(Callback Function)是一种非常重要的编程技术。回调函数是指一个通过函数指针调用的函数。简单来说,如果你将一个函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。
在C语言中,回调函数(Callback Function) 是通过函数指针调用的函数,通常作为参数传递给另一个函数(称为"高阶函数")。当特定事件或条件发生时,高阶函数会调用这个回调函数。这种机制常用于实现事件处理、异步操作和自定义行为。
回调函数的原理
-
函数指针:C语言中函数指针存储函数的地址,通过指针可以调用函数。
-
传递函数:将函数指针作为参数传递给另一个函数。
-
条件触发:高阶函数在特定条件下调用传递进来的回调函数。
使用回调函数的步骤(附示例)
1. 定义函数指针类型(可选但推荐)
typedef void (*Callback)(int); // 定义函数指针类型:接受int参数,无返回值
2. 实现回调函数
void OnEventA(int data) {
printf("事件A触发,数据: %d\n", data);
}
void OnEventB(int data) {
printf("事件B触发,数据: %d\n", data);
}
3. 创建接收回调的高阶函数
void EventHandler(const char* eventName, Callback callback, int data) {
printf("检测到事件 [%s]\n", eventName);
callback(data); // 触发回调函数
}
4. 主函数中使用回调
int main() {
// 将回调函数作为参数传递
EventHandler("网络响应", OnEventA, 100);
EventHandler("按键按下", OnEventB, 200);
return 0;
}
实际应用场景
-
事件驱动系统(如GUI库中的按钮点击)
-
异步操作(如网络请求完成后的通知)
-
算法定制化(如qsort的比较函数)
完整代码示例
#include <stdio.h>
// 1. 定义回调函数类型
typedef void (*EventCallback)(int);
// 2. 回调函数实现
void TemperatureAlert(int temp) {
if(temp > 30)
printf("警告!温度过高: %d°C\n", temp);
}
void HumidityAlert(int humidity) {
if(humidity > 80)
printf("警告!湿度过高: %d%%\n", humidity);
}
// 3. 高阶函数(事件处理器)
void SensorMonitor(int value, EventCallback callback) {
printf("传感器数据更新: %d\n", value);
callback(value); // 触发回调
}
int main() {
// 模拟传感器数据
int temp = 35, humidity = 85;
// 注册回调函数
SensorMonitor(temp, TemperatureAlert);
SensorMonitor(humidity, HumidityAlert);
return 0;
}
输出:
传感器数据更新: 35
警告!温度过高: 35°C
传感器数据更新: 85
警告!湿度过高: 85%
关键点总结
| 概念 | 说明 |
|---|---|
| 函数指针 | typedef 返回值类型 (*类型名)(参数列表); |
| 回调注册 | 将函数指针作为参数传递给高阶函数 |
| 触发时机 | 由高阶函数决定何时调用回调(如事件发生、数据到达等) |
| 优势 | 解耦代码、增强扩展性、支持异步处理 |
| 经典应用 | C标准库的qsort()、线程库的pthread_create()等 |
通过回调函数,您可以将具体操作逻辑与事件触发机制分离,极大提高代码的模块化和复用性。

浙公网安备 33010602011771号