首页 > 代码库 > 回调函数的应用误区1(原汁原味的函数指针应用)

回调函数的应用误区1(原汁原味的函数指针应用)

研究了一段时间回调函数,越看越迷惑,分析并改进了从网上看到的几篇好文,看过后有了自己的看法。我也不知道这些跌跌撞撞的认识是否符合回调的真实原理,若有大侠能帮解惑,自当感激不尽。

下面的代码可以在Vs2008下编译并运行:

个人观点:

虽说代码里面到处都注解说这里是回调函数声明,那里是回调函数实现;这里是被调函数声明,那里是被调函数实现;但.....其实个人更感觉这代码更像是一篇函数指针的应用。

跟回调函数没有太大关系,说有关系那也只是格式上的关系。

个人总结:

这篇文章可以让你学会函数指针的使用方法。把它当作回调函数学习入门的基础。

 #include <stdio.h>

//回调函数声明
typedef void (*CallBackFun)(void); // 为回调函数命名,类型命名为 CallBackFun,参数为char *p

// 回调函数实现:Afun:格式符合 CallBackFun 的格式,因此可以看作是一个 CallBackFun   
void Afun()
{
    printf("Afun\n");
}

//回调函数实现:Bfun:格式符合 CallBackFun 的格式,因此可以看作是一个 CallBackFun
void Bfun()
{
    printf("Bfun\n");
}

//被调函数:执行回调方式一:命名方式
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;
}