研究了一段时间回调函数,越看越迷惑,分析并改进了从网上看到的几篇好文,看过后有了自己的看法。我也不知道这些跌跌撞撞的认识是否符合回调的真实原理,若有大侠能帮解惑,自当感激不尽。
下面的代码可以在Vs2008下编译并运行:
个人观点:
虽说代码里面到处都注解说这里是回调函数声明,那里是回调函数实现;这里是被调函数声明,那里是被调函数实现;但.....其实个人更感觉这代码更像是一篇函数指针的应用。
跟回调函数没有太大关系,说有关系那也只是格式上的关系。
个人总结:
这篇文章可以让你学会函数指针的使用方法。把它当作回调函数学习入门的基础。
#include <stdio.h>
//回调函数声明
typedef void (*CallBackFun)(void); // 为回调函数命名,类型命名为 CallBackFun,参数为char *p
// 回调函数实现:Afun:格式符合 CallBackFun 的格式,因此可以看作是一个 CallBackFun
void Afun()
{
printf("Afun
");
}
//回调函数实现:Bfun:格式符合 CallBackFun 的格式,因此可以看作是一个 CallBackFun
void Bfun()
{
printf("Bfun
");
}
//被调函数:执行回调方式一:命名方式
void call1(CallBackFun pCallBack)
{
printf("call1: ");
pCallBack();
}
//被调函数:执行回调方式二:函数指针方式
void call2(void(*ptr)())
{
printf("call2: ");
(*ptr)();
}
int main()
{
call1(Afun);
call1(Bfun);
call2(Afun);
call2(Bfun);
return 0;
}