回调函数是什么

回调函数

回调函数就是函数指针的一种用法

函数指针是一个给其它函数预留的一个接口,只有符合这个接口定义的函数,不论你在函数里实现了什么,都可以。

 

 

回调函数是什么

在网上看了好多例子,以下这两个例子给我留下的印象最深:

诸葛亮给赵子龙一个锦囊,吩咐他危急时打开按锦囊指示办, 锦囊里的命令就是回调函数,危急时刻就是回调的时机。 
不同的锦囊里可以有不同的命令。

 

你想寄包裹,肯定要留下自己的联系方式和地址吧(相当于回调函数的地址)。然后开始打电话给快递,但快递不会马上来取件,而是通过你留下的联系方式和地址,在他有空或顺路的时候来联系你取件。在送包裹的过程中,服务好的话快递会在你包裹快递状态变化的各个环节通知你(比如已经送到分拣中心,由中心分发开始投递,到达对方所在城市,对方已经签收)。

 

 

就是主模块需要一个参数,但这个参数有些特别,特别之处在于,参数不能完全由外部数据来给出。必须要与主模块协作才能得到,所以在该处设置一个叫回调函数的东西,让他实现的功能是:主模块给出内部参数,通过指针调用外部子模块,而外部子模块这需要主模块的参数为传入参数,作用后得到的值在返回给主模块。说白了就是主模块给你子模块一袋面粉,然后子模块进加工成馒头后有返回给主模块。在详细一点就是:主模块通过指针找到子模块(馒头作坊),然后把面粉送过去,最后得到馒头,返回来。

 

举例:一个很简单的回调函数。

#include <stdio.h>
 
void printWelcome(int len)
{
       printf("欢迎欢迎 -- %d\n", len);
}
 
void printGoodbye(int len)
{
       printf("送客送客 -- %d\n", len);
}
 
void callback(int times, void (*print)(int))
{
       inti;
       for(i = 0; i < times; ++i)
       {
              print(i);
       }
       printf("/n我不知道你是迎客还是送客!\n\n");
}
void main(void)
{
       callback(10,printWelcome);
       callback(10,printGoodbye);
       printWelcome(5);
}


 

callback函数为B层,main函数和print*函数为A层,A层调用了B层的回调函数callmeback,而B层的回调函数调用了A层的实现函数print*。说白了B层就是一个接口。

 

为什么要使用回调函数?

 因为可以把调用者与被调用者分开。调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。把具体操作和选择操作的代码分开是一种良好的设计方法,更为复杂的操作将肯定以独立的函数来实现,因为它们的长度可能很长。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值