1.回调函数:
- 将函数作为指针传参给其他函数使用,实现解耦作用,将各个功能分开。
![Pasted image 20251125221724]()
- 举例,不含参数的回调函数:
#include"stdio.h"
int Callback()
{
printf("Hello, this is Callback ");
return 0;
}
int Handle(int (*callback)())
{printf("Entering Handle Function. ");
Callback();
printf("Leaving Handle Function. ");
}
int main()
{
printf("Entering Main Function. ");
Handle(Callback);
printf("Leaving Main Function. ");
return 0;
}
#include"stdio.h"
int Callback(int x)
{
printf("Hello, this is Callback,this param is %d",x);
return 0;
}
//callback是指针名,可以随便起,如*p
int Handle(int y,int *(callback)(int))
{printf("Entering Handle Function. ");
callback(y);
printf("Leaving Handle Function. ");
}
int main()
{
printf("Entering Main Function. ");
Handle(10,Callback);
printf("Leaving Main Function. ");
return 0;
}
// 定义一个函数指针类型:FuncPtr(指向“接收int、返回int”的函数)
typedef int (*FuncPtr)(int);// 用类型别名改写Handle函数的参数
int Handle(int y, FuncPtr callback) { // 等价于 int Handle(int y, int (*callback)(int))printf("Entering Handle Function. "); callback(y); // 直接用类型别名调用,更清晰printf("Leaving Handle Function. ");
}
- 函数指针的核心是「指针指向的函数必须有固定的参数列表和返回值类型」,声明语法的通用格式是:
返回值类型 (*指针变量名)(参数类型列表);
-
- 括号
(*指针变量名) 是关键:强制让 * 先与变量名结合,表明这是一个「指针」,而不是返回值为指针的函数。
- 后面的
(参数类型列表) 表明:这个指针只能指向「参数类型匹配」的函数。
- 最前面的
返回值类型 表明:这个指针只能指向「返回值类型匹配」的函数。