感觉回调函数就是通过函数指针调用函数.为什么要用回

作者&投稿:塔视 (若有异议请与网页底部的电邮联系)
遍历函数里的形参为什么用一个函数指针void(*vi)(ElemType*),这样有什么好处?~

遍历函数里的形参用一个函数指针void(*vi)(ElemType*)的好处:提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者;当特定的事件或条件发生的时候,调用者使用函数指针调用回调函数对事件进行处理。
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方法直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

函数指针实质是一个指针,该指针指向函数的入口地址,回调函数只不过是通过参数自己调用自己,首先它是一个函数,跟函数指针完全没有什么可比性,风马牛不相及。
定义一个函数指针你看下:void (*func)(int ,int);
再给你看看比如:int *p; int max(int x,int y);
p=max;这里呢就是一个指针指针一个函数,所以这个p也是一个函数指针,说白了它就只是一个指针,只是不过指向的是一个函数而已,就这么简单。
就这样调用就可以了int result=(*p)(a,b)
你们不要总是把函数指针和指针函数比来比去的,也没有什么可比性,函数指针就只是一个指针,指针函数就只是一个函数就完了!

回调函数、面向对象中的事件函数,软硬件层的中断,DLL的挂钩,委托,windows的消息循环,都具有相似的功能,这类函数或者说调用方式的特点,用句普通话来说就是:回头再调用。
被调方属于客户程序,其作用是处理一些特定操作,而客户程序对于执行顺序不做规定或者说事先无法确定,亦或者为了效率不作循环等待,因此将被调函数的地址(回调函数的指针)告诉调用方,以便调用方适当时候调用执行;调用方服务于客户程序(下面称服务方),其但本身不负责具体数据操作,也不关心被调方如何处理数据,它只负责在其本身的过程中监控某种条件,一旦条件满足便把数据通过地址(回调函数指针)发给被调者并通知其执行。
编写程序时可以将两者的逻辑分开考虑,不需要有严格的相关性,但是必须有相同的调用约定(接口一致,逻辑开放),这种调用方式可以实现调用时的多态。多态的好处或者说应用场景一般是针对一些操作,事先无法确定时机、顺序以及操作方式,而是需要在处理过程中确定或者遇到满足特定条件发生时再确定如何操作。所以,在程序运行期间,客户程序可以随时根据需要切换地址,传递不同的回调函数地址,这样服务方可以不用改变任何操作流程(无需重写代码),就可以简单地切换不同的核心功能,实现多态。
举个生活中例子:你家在装修,委托施工队在家施工,特地请假在家监督(随时处理施工队遇到的问题和材料采购请求),但是忽然你老板让你去一次公司处理一件重要的事情,因此你告知施工负责人让他有问题时打你手机(调用服务并传递回调函数指针-你的手机号,C#中的委托就是这个概念),然后你就不用守候在家里了。后来施工队发现胶水用完了,因此按照约定,负责人打电话(事先传递的回调函数指针)给你把情况(数据)告诉你,并询问买什么牌子的。你接到电话确定了品牌(回调函数被执行),然后反馈给负责人(代码中则是通过服务方的方法下达指令,也可以直接通过回调函数返回),此例中回调函数就是你本身,回调函数指针就是你的手机号。
实际运用的简单例子:对一个int型的一维数组进行循环时需要有不同的操作,比如有时需要取最大值,有时需要取最小值,当然你完全可以写两个循环函数,主程序需要做什么就调用什么。但是用回调函数就只需要写一个循环,循环函数就是服务方,循环体的核心只负责在取到前后两个相邻值后调用回调函数,而主程序在调用循环前传递了回调函数指针,当需要取最大值时或最小值时,将对应的函数指针传递给循环函数。
多个相似的处理流程,服务方只负责统一的逻辑,比如循环逻辑,不同的处理事务由客户方提供,需要怎么处理就传递对应的函数地址,这就是回调函数灵活的优势,当然,客户程序必须事先准备好(编写)各种回调函数。
上面所说的优点属于运行时多态,而我认为这类委托模式最大优点是可以做到用户交互层面的多态,根据用户不同选择,实现不同的功能,使得实现动态系统成为可能,好处是什么,大型应用系统业务更改不需要改代码重新编译了,或者说改动量大大减少,这对于系统维护来说是很重要的。

裙叱咤风云椭蓉操心苹


股市中你在哪些股票上大赚过?最好是写一下买卖点及相应的心境,谢谢...
再有就是大幅回调函数,从八块七跌到八块不上,接近十个点。在这儿,我恰当的实际操作应该是把以前减的半仓补回家,可是,要了解第二根紫线完毕的部位相对性我售出的情况下早已过去二十天,持仓早被占有。后边股票价格再次拉涨,在第二个绿箭头符号那边,我又逐渐手心痒了,由于那边是8月11号,我看到股票大盘要回调...

腾讯的点击验证码是什么原理
先来看看在UI层面,就是最常见的,通过javascript在DOM上绑定的监听事件触发回调,如图所示,如果我把右边红圈中的click监听remove掉,点击按钮之后就什么反应都没有了,所以基本确定它验证码的逻辑都卸载了这个CT_btn_trigger的回调函数中。然后看看点击后弹出的layer:全都是用DOM实现的,我在代码中没有发现任何flash ...

Windows的任务管理器
\/\/在回调函数中,我们可以获得窗口的标题和相关进程,线程信息;GetWindowText(hWnd,szWindowText,dwMaxCount);GetWindowThreadProcessId(hWnd,&dwPID);2.设备驱动器信息(服务和设备驱动器差不多,在此不做重复)设备驱动信息有服务控制管理器(SCM)来管理的,我要打开服务控制管理器,并枚举所有的设备驱动器。OpenSCManager(...

你知道哪些学习C语言过程中的难点?
后来工作,接触多了,重新学习了操作系统,甚至是汇编,发现实际这个问题和操作系统有很大关系。c\/c++也是这期间自学的,根本没看过什么谭浩强的书,通过反汇编看c\/c++代码,了解其实际实现机制,突然发现所谓c++的虚函数,纯虚函数如此简单,甚至了解了gcc和vc的差异。后来是看官方库(那时还是bc),读...

只知道这代码是初始化Ajax缓存,有大佬翻译具体意思吗?
当你发送HTTP请求,你不希望浏览器挂起并等待服务器的响应,取而代之的是,你希望通过页面继续响应用户的界面交互,并在服务器响应真正到达后处理它们。要完成它,你可以向XMLHttpRequest注册一个回调函数,并异步地派发XMLHttpRequest请求。控制权马上就被返回到浏览器,当服务器响应到达时,回调函数将会被调用。[AJAX实际...

html中一个按钮可以同时触发2个js函数吗?
加一些从新窗口打开第二个页面(表)的代码。方式二:从主页面调用第二页面,也就是说,从主页发送ajax请求,服务器端同时将主页面和第二个页面需要的数据准备好后发送给主页面。主页面在回调函数中抽取本页面的数据更新,同时抽取第二个页面所需要的数据,通过javascript调用第二个页面。

vue3官方文档pdf(vue30pdf)
watch需要侦听特定的数据源,并在回调函数中执行副作用。默认情况是懒执行的,也就是说仅在侦听的源变更时才执行回调。 可以直接导入onXXX一族的函数来注册生命周期钩子:uni-app项目小程序端支持vue3介绍 随着vue3的发布,uni-app也逐步支持vue3。 目前小程序平台已支持,h5、App平台暂不支持。 除支持vue3语法特性外...

vue3官网文档?
所以侦听副作用传入的函数可以接收一个onInvalidate函数作入参,用来注册清理失效时的回调。当以下情况发判岁生时,这个失效回调会被触发: 我们之所以是通过传入一个函数去注册失效回调,而不是从回调返回它(如ReactuseEffect中的方式),是因为返扒雹回值对于异步错误处理很重要。 在执行数据请求时,副作用函数往往是一个...

如何查找唤醒android系统
2)在定时器都到时间以后,定时器的回调函数会查看是否有其他的wakelock,如果没有,就在这里让系统进入睡眠. 3)在wake_lock()中,对一个wakelock加锁以后,会再次检查一下有没有锁,我想这里的检查是没有必要的,更好的方法是使加锁的这个操作原子化,而 不是繁冗的检查.而且这样的检查也有可能漏掉. Android于标准Lin...

前端必学-函数式编程(六)
释义:回调函数其实就是一个参数,将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的这个函数。通常来说,我们最先想到的是:把 lookupOrders(..) 写到 onCustomer(..) 里面,那我们就可以确认 onOrders(..) 会在 onCustomer(..) 之后运行。这样写,对吗...

昭觉县17893742104: 感觉回调函数就是通过函数指针调用函数.为什么要用回 -
龙顺欣露: 回调函数、面向对象中的事件函数,软硬件层的中断,DLL的挂钩,委托,windows的消息循环,都具有相似的功能,这类函数或者说调用方式的特点,用句普通话来说就是:回头再调用. 被调方属于客户程序,其作用是处理一些特...

昭觉县17893742104: 什么是回调函数 -
龙顺欣露: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方法直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应.

昭觉县17893742104: 关于回调函数的详细讲解
龙顺欣露: 回调函数2010年03月09日 星期二 上午 10:20 对指针的应用是C语言编程的精髓所在,而回调函数就是C语言里面对函数指针的高级应用.简而言之,回调函数是一个通过函数指针调用的函数.如果你把函数指针(函数的入口地址)传递给另一...

昭觉县17893742104: 定义回调函数必须用callback么 -
龙顺欣露: callback函数 定义: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定的事件

昭觉县17893742104: 回调函数 什么时候执行 -
龙顺欣露: 函数都是被动调用执行的,即使是回调函数,所谓适当的时候,就是程序分支运行到此的时候,对于你这句代码,估计是有数据下载的时候被执行.

昭觉县17893742104: 回调函数怎么把参数定义成固定的index 和item -
龙顺欣露: 回调函数就是被调用者回头调用调用者的函数.回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数.回调函数不是由该函数...

昭觉县17893742104: 回调函数是怎么实现的?为什么系统就会去调用回调函数 -
龙顺欣露: 回调函数是应用程序提供给Windows系统DLL或其它DLL调用的函数,一般用于截获消息、获取系统信息或处理异步事件.应用程序把回调函数的地址指针告诉DLL,而DLL在适当的时候会调用该函数.回调函数必须遵守事先规定好的参数格式...

昭觉县17893742104: 怎么来写一个回调函数 -
龙顺欣露: 你问这个问题有点含糊.在Windows中不同的领域的回调函数是不同的.例如在创建窗口中使用的窗口函数是在窗口类中填写,然后使用API注册. 不过简单的来说.得先按照API的要求编写一个函数.例如创建窗口要求的消息处理回调函数的结构是: ...

昭觉县17893742104: c语言的回调函数的问题 -
龙顺欣露: 我认为是这样的,如果采用消息触发的模式,结果是你在a处按下鼠标,则系统会将这个事件形成一个发给该窗口的消息进入消息队列,等到该窗口处理这个消息时,才会调用你的回调函数,你的程序是否停在a点由操作系统调度决定. 如果是中断方式触发的,你的程序可以被鼠标点击事件中断,那么可能会是在a点中断,最后又返回a点继续执行.

昭觉县17893742104: 回调函数是什么 -
龙顺欣露: 回调函数 程序员常常需要实现回调.本文将讨论函数指针的基本原则并说明如何使用函数指针实现回调.注意这里针对的是普通的函数,不包括完全依赖于不同语法和语义规则的类成员函数(类成员指针将在另文中讨论). 声明函数指针 回调...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网