1. C语言回调函数的核心概念
回调函数是C语言中一种强大的编程技术,它允许我们将函数作为参数传递给其他函数。这种机制在事件驱动编程、异步操作和模块化设计中特别有用。理解回调函数的关键在于掌握函数指针的概念。
1.1 函数指针基础
函数指针是指向函数的指针变量,它存储的是函数的入口地址。声明一个函数指针需要指定返回类型和参数列表:
c复制// 声明一个函数指针类型,指向返回int且接受两个int参数的函数
typedef int (*operation_ptr)(int, int);
// 实际使用
int add(int a, int b) {
return a + b;
}
operation_ptr op = add; // 将add函数的地址赋给op指针
int result = op(3, 5); // 通过指针调用函数,等同于add(3,5)
注意:函数指针的类型必须与被指向的函数完全匹配,包括返回类型和所有参数类型。类型不匹配会导致未定义行为。
1.2 回调函数的本质
回调函数是通过函数指针实现的"延迟调用"机制。当我们将函数A的指针传递给函数B,函数B在适当的时候通过这个指针调用函数A,这就是回调。这种机制实现了控制反转(IoC)——不是由调用者决定何时调用函数,而是由被调用者决定。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 回调函数的典型应用场景
2.1 事件处理系统
在GUI编程或嵌入式系统中,回调函数常用于处理用户输入或硬件中断:
c复制// 注册按键回调函数
void register_key_handler(void (*handler)(int keycode)) {
// 保存回调函数
g_key_handler = handler;
}
// 按键中断服务例程
void key_isr() {
int keycode = read_key();
if(g_key_handler) {
g_key_handler(keycode); // 调用注册的回调函数
}
}
2.2 排序算法中的比较函数
标准库qsort函数就是回调函数的经典应用:
c复制#include <stdlib.h>
//
