C语言函数指针之回调函数及其应用场景.docx

上传人:王** 文档编号:1129798 上传时间:2024-04-02 格式:DOCX 页数:5 大小:39.53KB
下载 相关 举报
C语言函数指针之回调函数及其应用场景.docx_第1页
第1页 / 共5页
C语言函数指针之回调函数及其应用场景.docx_第2页
第2页 / 共5页
C语言函数指针之回调函数及其应用场景.docx_第3页
第3页 / 共5页
C语言函数指针之回调函数及其应用场景.docx_第4页
第4页 / 共5页
C语言函数指针之回调函数及其应用场景.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《C语言函数指针之回调函数及其应用场景.docx》由会员分享,可在线阅读,更多相关《C语言函数指针之回调函数及其应用场景.docx(5页珍藏版)》请在优知文库上搜索。

1、1什么是回调函数?首先什么是“回调呢?我的理解是:把一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被调用执行,这就叫做回调。如果代码立即被执行就称为同步回调,如果过后再执行,则称之为异步回调。回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。2为什么要用回调函数?因为可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。它只需知道存在一个具有特定原型和限制条

2、件的被调用函数。简而言之,回调函数就是允许用户把需要调用的方法的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。主函数Call库函数intCalIbackOUK回调函数/TODOreturn0;intmain()/主函数TODO1.ibrary(Callback);HK库函数通过函数指针进行回调/TODOreturn0;回调似乎只是函数间的调用,和普通函数调用没啥区别。但仔细看,可以发现两者之间的一个关键的不同:在回调中,主程序把回调函数像参数一样传入库函数。这样一来,只要我们改变传进库函数的参数,就可以实现不同的功能,这样有没有觉得很灵活?并且当库函数很复

3、杂或者不可见的时候利用回调函数就显得十分优秀。3怎么使用回调函数?intCallback_l(inta)/回调函数1printf(,Hello,thisisCallback_l:a=%d”,a);return0;intCallback_2(intb)/V回调函数2printf(,Hello,thisisCallback_2:b=%d,b);return0;intCallback_3(intc)/回调函数3printf(Hello,thisisCallback_3:c=%d,c);return0;intHandle(intx,int(*Callback)(int)/M26工作状态集合函数M26_

4、WorkStatus_TypeDefM26_WorkStatus_Tab=GPRS_NETWORK_CLOSE,M26_PWRKEY_Off,模块关机GPRS-NETWORK-OPEN,M26_PWRKEY_On,模块开机GPRS_NETWORK_Start,M26_WorkJnit,/管脚初始化,/连接调度中心), 等待调度中心回复),/连接前置机,/等待前置机回复GPRS-NETWORK-CONF,M26_NET_Config,/AT指令配置GPRS_NETWORK_LINK_CTC,M26_LINK_CTCGPRS_NETWORK_WAIT_CTC,M26_WAIT_CTCGPRS_NE

5、TWORK_LINK_FEM,M26_LINK_FEMGPRS_NETWORK_WAIT_FEM,M26_WA1T_FEMGPRS_NETWORK_COMM,M26.COMM),正常工作GPRS_NETWORK_WAIT_Sig,M26_WAIT_Sig,等待信号回复GPRS_NETWORK_GetSignal,M26_GetSignal,获取信号值GPRS_NETWORK_RESTART,M26_RESET,模块重启1*M26模块工作状态机,依次调用里面的12个函数uint8_tM26_WorkStatus_Call(uint8_tStart)uint8_ti=O;for(i=0;ionEv

6、ent();这些场景只是回调函数在C+中的一部分应用示例,实际上,回调函数是一种灵活的编程模式,可以根据具体需求在各种情境中使用。回调函数使得程序具有更好的扩展性和可维护性,同时提高了代码的模块化和复用性。c+回调函数的使用java的实现方式java的回调函数可能都不陌生,使用接口interface的方式,在接口中定义回调函数。函数参数可以是interfance。调用函数的时候,实现这个interface的函数即可。简单示例:publicinterfaceCallBackpublicvoidexecute();)publicvoidtest(CallBackcallBack)System.ou

7、t.println(callback);callBack.execute();test(newCallBack()Overridepublicvoidexecute()System.out.println(callbackimplement););c+的实现c+是通过函数指针(c的语法)和std:function(c+ll里面的语法)来实现的。c+回调函数的使用场景有下面几种:回调函数是普通函数回调函数的使用场景一般是,一个函数中最后产生一个结果,该函数不再去管这个结果后续的使用,而使用回调函数进行处理。可以先定义好回调函数的函数指针,一般格式:返回值(*指针名)(参数列表)typedefvo

8、id(*CaptureCallback)(string);voidcapturePic(CaptureCallbackcallback)stringt=apicn;callback(t);voidrenderPic(stringt)print(t);)capturePic(renderPic);上面就是一个简单的例子,在捕获图片的函数里面使用渲染图片的回调函数。回调函数是成员函数在c+面向对象里面,回调函数是成员函数的情况更常见,这样的好处是,一个类A的一个函数生成一个结果之后,可以调用另一个类B的成员函数。而不必类A拥有B的实例。尤其是在B中有了A的实例的情况下,A中如果再包含B的实例会出现

9、循环引用的问题,这也是可以解决的,但是这种耦合还是容易让逻辑变得混乱。typedefstd:functionCaptureCallback;classCaptureControllerpublic:CaptureCalIbackcallback;CaptureController(CaptureCallbackCallback):CailbaCk(CalIbaCk);voidcapturePic(CaptureCallbackcallback)stringt=,apiccallback(t);classUI开始捕捉图像voidStartCaptureOCaptureControIlerc(std:bind(&UI:renderPic,this,_i);c.capturePic();演染图片作为回调函数voidrenderPic(stringt)print(t);)main.cppUIui;ui.StartCaptureO;上面的例子就很好的说明了为什么需要回调函数,以及回调函数是如何使用的。在Ul的类中已经引用了CaPtUreCO

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > C/C++资料

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!