打印

是不是通过函数指针调用的那个函数就能称为回调函数?

[复制链接]
1174|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
llljh|  楼主 | 2013-2-24 19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
是不是通过函数指针调用的那个函数就能称为回调函数?
沙发
dingy| | 2013-2-24 19:59 | 只看该作者
1.什么是回调函数?
     回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,
     当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。

2.为什么命名为回调函数?
    “回调”这两个字的来源:一般的函数调用是调用者调用接口实现功能,而这里却是调用者提供一个函数
     让实现者来调用从而完成想要的功能,即我调用你来调用我自己来实现功能,这就是所谓的“回调”。
                   调用者---调用---实现功能
                   调用者---提供---实现功能

3.为什么要引入回调函数?
  A.方便性:
      同一个函数,通过指针,指向同一类型的不同函数地址,调用统一类型的不同函数,大大增强了该函数的
      灵活性,不用写多个函数。如窗口处理过程。   
  
  B.程序结构化清晰:
      在音频处理函数中,留出回调函数接口,可以让音频函数结构比较好,不至于加入很多按键等处理消息。
      也许有人有疑问,  不用回调方式也可以!不用回调方式有时比较麻烦:调用其它函数,而其它函数可能
      根本不是自己处理的,不知道如何留接口,如何定义这个函数。而用回调函数则不必关心这个问题,只 需要定义一个 void *pFun; 然后定义一个函数 callback(pFun) 留做接口就行了。后面把函数的指针传进来强行转换就可以了。

使用特权

评论回复
板凳
pengf| | 2013-2-24 20:01 | 只看该作者
call back 的概念很简单,但是内涵很深刻。 当你知道 why 要用回调, 而且知道 when, where 时, 可以肯定你是一个高手了。mcu 的程序很简单, 很少用到回调, 也没有必要用。

使用特权

评论回复
地板
pengf| | 2013-2-24 20:01 | 只看该作者
在大型 c/c++ 程序中, call back 必不可少, 其实在VC, C++Builder, C#, VB 中的 event, 都是回调。与原生态的 c, C++一样,本质都是一个函数指针。

使用特权

评论回复
5
llljh|  楼主 | 2013-2-24 20:02 | 只看该作者
嗯,多谢几位,其实我在网上也看到了

使用特权

评论回复
6
llljh|  楼主 | 2013-2-24 20:03 | 只看该作者
结贴啦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

855

主题

11301

帖子

6

粉丝