C语言(回调函数)

回调函数在程序开发中是一个非常重要的概念,所谓的回调其实就是不同程序模块之间的接口和约定,是软件分层设计的基本方式。

 

拓展:

回调(callback)是一种非常重要的机制,主要可以用来实现软件的分层设计,使得不同软件模块的开发者的工作进度可以独立出来,不受时空的限制,需要的时候通过约定好的接口(或者标准)相互契合在一起,也就是C++或者JAVA等现代编程语言声称的所谓面向接口编程。同时回调也是定制化软件的基石,通过回调机制将软件的前端和后端分离,前端提供逻辑策略,后端提供逻辑实现。

我们知道C语言中的函数实际上就相当于一个人,你给他一些参数,他帮你完成一样固定的功能,比方说你给厨师一个菜名,他将会把这道菜烹饪出来,你给医生一位病人,他将会对这位病人进行医治等等,这里,厨师和医生都相当于功能确切的函数,等着你来调用。我们身边不乏有很多这样的“函数”,假设你每天都到食堂吃饭,慢慢地你发现每次吃饭来回一趟走路的时间太长,于是你想让前台小妹吃饭时顺便帮你打饭回来,那么,在小妹外出午餐之前,你传递一些参数给她(比方说:10块钱,以及说清楚你要吃什么),半个小时后,小妹拿着饭堂热腾腾的盒饭回来给你。这就是普通函数的调用过程:你调用了小妹,实现了你脚不挪手不动也能吃上饭的夙愿,用图来说明一下这个过程:

 

 

那什么是回调呢?

吃了食堂的饭一个礼拜之后,实在太难吃,你已经确定你无法再吃下去了,于是你决定不吃食堂的饭,改为自己做饭吃,当然你不能亲自出马,你还是调用前台小妹帮你干活,这次你也必须给她一些钱,以及你想吃的东西,让她帮你去菜市场买回来做好,端给你吃。虽然前台小妹非常愿意为你效劳,她可以跑腿、买菜、砍价、端茶递水,但可惜她不会做饭,你急中生智,果断地从黑市雇佣了一名资深大厨,啥也不会就会做饭,你只要给他材料就行了。这样,你的午饭的产生过程变成了:你将要吃的菜品清单和需要花的钱传递给前台小妹,不仅如此,你还把大厨的电话号码给到小妹,叮嘱说:买了菜就打这个电话,让他帮你把菜做了,然后你捯饬好了给我送过来。于是小妹屁颠屁颠地就出去买菜了,与此同时,你可以“定制”你的大厨,你叮嘱你的大厨说:大厨,我喜欢吃辣,以后你做的任何菜里,都要放够足量的辣椒。请看:

在上面的“午饭”秀中,实现了典型的回调机制,你定制了一位做任何菜都死命放辣椒的大厨,然后你在调用前台小妹的同时,将大厨的电话号码也给到她,小妹在需要做饭的时候,就会根据你提供的参数(大厨的电话)回过去调用(回调!)那位大厨,做好饭后小妹再细心地捯饬捯饬,端给你吃。

 

你还应该注意到,在上图中一个最重要的信息:左边的两个人和右边的那个人之间有一条饱含深意的虚线,他意味着左右两边是两拨人,左边的人负责做饭和吃饭,右边的人负责跑腿、砍价等。比如:你只要知道怎么找到前台小妹,传给她参数让她干活就行了,根本不需要知道她究竟到哪儿买的菜跑了多远的路,另外管好大厨,让他死命放辣椒就行了,也根本不需要管小妹什么时候会去找大厨,以及他们之间的任何其他事情。对于右边的小妹而言,她只要根据你的嘱咐勤快跑腿,有必要的时候“回调”一下大厨就行了,也根本不管大厨做的饭究竟啥口味。

瞧,左右两拨人各干各的,互不耦合,独立性强,但又可以非常方便地相互合作,达成一个更丰富的功能。这里,大厨就是一个回调函数——一个不被设计者(你)直接调用,而是被其他人(小妹)回过来调用的函数。你传递给小妹的电话号码,相当于一个能找到大厨的指针,被称之为函数指针,回调机制就是靠传递函数指针来告知回调函数的位置的。

  • 38
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

干燥剂007860

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值