回调函数预备知识
在深入理解回调函数之前,我们需要先掌握一个基础概念:函数指针。C 语言的灵魂是指针,我们常接触整型、字符或结构体指针,但函数指针指向的是代码本身。
什么是函数指针
函数指针也是指针,但它存储的不是变量的地址,而是函数的入口地址。定义语法如下:
返回类型 (*指针变量名)(参数类型列表);
- 返回类型:被指向函数的返回值类型(如
int,void等)。 - 指针变量名:自定义的名称。
- 参数类型列表:函数接受的参数类型。
这里有个关键点:括号不能省略。(*p) 的优先级高于 *,如果写成 return_type *p(args),编译器会将其解析为'返回值为指针的函数声明',而非函数指针。
为了方便使用,通常配合 typedef 定义别名:
// 定义一个函数指针类型 Fun1,指向返回 int、接受一个 int 参数的函数
typedef int (*Fun1)(int);
// 定义一个函数指针类型 Fun2,指向返回 void、无参数的函数
typedef void (*Fun2)(void);
如何调用函数指针
赋值时,函数名本身就代表地址,无需加 &。调用时直接像普通函数一样使用即可。
int Func(int x) { return x * 2; }
int main() {
// 定义并初始化函数指针
int (*p)(int) = Func;
// 通过指针调用
int result = p(5); // 等价于 Func(5)
return ;
}


