通俗易懂的讲解回调函数,保证让你看懂callback

article/2025/9/17 12:17:47

什么是回调函数?相信很多人都似懂非懂,半懂不懂,今天就通俗易懂的讲解回调函数,让你能理解回调函数的大部分作用及意义。

目录

定义

形象的例子

代码解释

用处及完整代码例子


定义

先上常规的定义:

回调函数也是一个函数。与一般函数直接调用区别在于,使用回调函数的过程,是一个函数将另一个函数作为参数调用。而被用来调用的那个函数,就是回调函数。

具体的实例,此处的cmp这个函数就是作为sort函数的参数来使用! 

形象的例子

以下是通俗的解释:

回调,其实就是callback的英文翻译:

callback

也就是call back

通俗理解,call back:打回去

你去店里买东西,老板说没货了,让你留一个联系你的方法,(这个方法包含一些具体怎么做,比如几点可以联系你,用wx还是电话),到货了就使用这个方法来通知你。

换句话说,就是顾客留下了打电话给顾客的一个具体的方法(即函数),然后由商家去调用这个方法。

代码解释

接下来细致的讲解:

一般来说函数的参数都是普通的什么int型

但是我们也可以让函数的参数,是一个函数,例如:

 

各个语言的回调函数的语法格式各不相同,因此此处使用伪代码的形式:

funcB(int a){

 print(a);

funcA(funcB){

  funcB();

上面的伪代码让A的参数包含了B这个函数,然后让A去调用B这个函数。

我们就可以看到,其实所谓的回调函数,与普通函数的区别在于,我们将这个函数的调用权利,交给了别的函数内部来调用,而不是我们自己去直接调用。

我们调用了A这个函数,然后A去调用B函数,B函数是被间接调用的,这个被间接调用的就是B函数。

(上面将函数当作参数的方法,这里的写法并不规范,不同语言中有不同的写法。在c里面是函数指针,在C#里是委托

 

用处及完整代码例子

那这样有什么用呢?

那么它相比普通的函数间互相调用的方法有什么好处呢?

1.增加了代码的灵活性,可以介入一些系统本来就提供的函数间的运行过程。

以往的代码,参数都仅仅是一些对象,而将函数作为参数可以增加灵活性。

具体来说,就例如,我们如果需要排序,那我们怎么做呢,自己写一个肯定很麻烦。

我们可以调用系统的Sort函数

例如:

#include<iostream>
#include<vector>
#include<algorithm>using namespace std;int main() {// 方式一、使用数组int a[10] = {9, 6, 3, 8, 5, 2, 7, 4, 1, 0};sort(a, a + 10);  // 10为元素个数return 0;
}

这样可以实现一个升序排序的效果。

但如果我们要实现降序排序呢?怎么办?不可能自己写一个降序排序吧。

我们希望告诉系统的sort函数,你这次排序给我按照降序排序的规则来做。我们也就是传达一个消息给系统,如何传达呢?

就是我们自己写一个排序规则的函数,然后作为参数传给系统:

#include<iostream>
#include<vector>
#include<algorithm>using namespace std;bool cmp(int num1, int num2) {return num1 > num2;     // 可以简单理解为 >: 降序排列;  < : 升序排列
}int main() {// 一、使用数组int a[10] = {9, 6, 3, 8, 5, 2, 7, 4, 1, 0};sort(a, a + 10, cmp);  // 使用自定义排序函数return 0;
}

可以看到,此处的cmp就是一个回调函数!它写出来后,我们没有亲自调用过它,而是将它作为参数,传达给系统的这个Sort函数,告诉它让它按照我们的这个规则来做。

这样我们就可以在不修改系统给定的Sort函数的情况下去介入这个Sort的过程!这就是回调函数的意义所在。

再例如更为复杂的排序规则,包含有结构体的情况,我们希望按照某个结构体的某个属性来排序:

比如既可以按照name排序,也可以按照grade排序

struct Student {    // 学生结构体string name;    // 学生姓名int grade;      // 学生分数Student();  // 无参数构造函数Student(string name, int grade) : name(name), grade(grade) {};  // 有参数构造函数
};

那么写法如下:

#include<iostream>
#include<vector>
#include<algorithm>using namespace std;struct Student {    // 学生结构体string name;    // 学生姓名int grade;      // 学生分数Student();  // 无参数构造函数Student(string name, int grade) : name(name), grade(grade) {};  // 有参数构造函数
};bool cmp(Student s1, Student s2) {  // 自定义排序if (s1.grade != s2.grade) {     // 如果学生成绩不同return s1.grade > s2.grade; // 则按照成绩降序排列}return s1.name < s2.name;   // 否则按照姓名升序排列
}int main() {vector<Student> studs;studs.emplace_back("Bob", 80);studs.emplace_back("Ali", 90);studs.emplace_back("Ann", 85);studs.emplace_back("Liming", 90);studs.emplace_back("Trump", 79);studs.emplace_back("Fury", 58);studs.emplace_back("Jam", 62);studs.emplace_back("Lucy", 89);sort(studs.begin(), studs.end(), cmp);  // 排序for (int i = 0; i < studs.size(); i++) {    // 输出结果cout << studs[i].name << "\t" << studs[i].grade << endl;}return 0;
}

回调函数还有其他的作用,例如在适当的时机通知函数使其调用,还可以提高运行的效率。

以及还有其他的用途,如同步回调,异步回调、以及回调地狱,在后续的文章我会进行讲解(可能),欢迎关注我的博客。


http://chatgpt.dhexx.cn/article/QH8FhhHa.shtml

相关文章

callback(回调函数)

先讲点题外话。 编程分为两类&#xff1a;系统编程&#xff08;system programming&#xff09;和应用编程&#xff08;application programming&#xff09;。所谓系统编程&#xff0c;简单来说&#xff0c;就是编写库&#xff1b;而应用编程就是利用写好的各种库来编写具某种…

Callback回调函数介绍(C语言)

目录 1. 回调函数的定义 2. 为什么要用回调函数 3. 怎么用回调函数 3.1 怎么使用没有参数的回调函数 3.2 怎么使用带参数的回调函数 1. 回调函数的定义 最近在工作中经常用到回调函数callback&#xff0c;总结一下。 先来看看维基百科对callback的解释&#xff1a;In co…

Callback函数详解

http://shiwawa.blog.hexun.com/9925417_d.html 一,回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理、用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义呢?它和其它函数(比如钩子函数)有何不同呢…

《软件质量保证与测试》学习笔记【第一章 软件测试基本概念】

目录 前言为什么要进行软件测试什么是软件缺陷1.1 什么是软件测试1.2 软件测试与CMMI软件质量保证SQA与软件测试的关系 1.3测试用例1.3.1什么是测试用例测试用例的五大要素测试用例1.3.2测试用例的评价标准1.3.3测试用例设计的基本原则1.3.4测试用例模板 1.4测试环境1.4.1什么是…

群晖NAS教程(十)、利用Docker安装蚂蚁笔记(leanote)

为了更好的浏览体验,欢迎光顾勤奋的凯尔森同学个人博客 群晖NAS教程(十)、利用Docker安装蚂蚁笔记(leanote) 蚂蚁笔记是一款特别棒的笔记软件,支持Markdown语法,是程序员必备的软件之一。下面我们就在群晖DS918+的机器上docker出来一个耍耍。 一、下载蚂蚁笔记(leanote)镜…

基于 Qt 框架的开源笔记软件 VNote

关注、星标公众号&#xff0c;直达精彩内容 来源&#xff1a;OSC开源社区 作者&#xff1a;tamlok VNote是一个受Vim启发开发的专门为Markdown而优化、设计的笔记软件。 授权协议&#xff1a;MIT 开发语言&#xff1a;C/C JavaScript HTML/CSS SHELL 操作系统&#xff1a;跨平台…

VisionPro软件笔记

VisionPro笔记 1、CogPMAlignTool的操作方法&#xff1a; 抓取图像-设置训练区域及参数-训练模板-设置运行参数与区域-运行-查看结果 2、CogPMAlignTool的基本原理&#xff1a; 图案位置搜索工具&#xff08;识别定位&#xff09;基于边缘特征的模板而不是基于像素的模板匹配…

一款开源的支持离线的支持MarkDown的优秀笔记软件----思源笔记

日常工作中&#xff0c;大家可能会用笔记软件记录自己积累的一些知识&#xff0c;组建自己的知识管理系统&#xff0c;常用的工具可能有云笔记&#xff0c;如有道云笔记&#xff0c;印象笔记等&#xff0c;但是有时候在工作中&#xff0c;信息比较敏感&#xff0c;不能够将信息…

一文了解常用效率记笔记软件(超过20款含有图片和双向链笔记)

前言 Mac 软件推荐下载网址 麦软网&#xff1a;https://www.macfz.com腾讯柠檬&#xff1a;https://lemon.qq.com/lab 更新时间 第七次更新 6 月 28 号 &#xff0c;对于有道和印象的理解&#xff0c;有时间把这篇文章拆分下第六次更新 5 月 27 号&#xff0c;更新了如何看待…

知识管理软件,有道云笔记的优缺点和C笔记

前言 软件有道云笔记C笔记发布时间2011年6月28日还在内测所属公司网易公司北京创新乐知网络技术有限公司 1.笔记的重要性&#xff1a; 大家有没有一种种感受&#xff0c;我们成日钻研书籍&#xff0c;天天认真听讲&#xff0c;发奋学习&#xff0c;收到的反馈却并不理想&…

OneNote-做笔记的软件-强烈推荐

一、认识电子笔记本 普通笔记本转化为电子笔记本 笔记可以将我们的想法和从外部获取的信息进行归纳和整理&#xff0c;而电子笔记本就是将传统的笔记进行了电子化电子笔记本的优势 可搜索统一管理高效编辑可修改性多端同步主流电子笔记本 OneNoteEver note(印象笔记)Notability…

推荐几款好用的云笔记软件

一直钟爱印象笔记&#xff0c;程序员的电脑上必装的软件&#xff0c;但最近期限到了&#xff0c;再也不能像以前无限制的上传文件&#xff0c;续费也比去年的只要九块九一年高出了很多倍&#xff0c;因此&#xff0c;注册试用了其他的笔记&#xff0c;发现云笔记众多&#xff0…

php个人笔记系统 开源,Github精选!一款开源免费的轻量级笔记软件

更多精彩内容&#xff0c;请关注公众号【平凡而诗意】 ​ 笔记软件是工作和学习过程中经常会用到的软件&#xff0c;会议纪要、工作事项、待办&#xff0c;都需要用到笔记软件&#xff0c;这样能够明确做事的先后顺序&#xff0c;能够提高做事的效率。 笔记软件数不胜数&#x…

软件工程复习笔记 类图

类图 前言1 类图的概念1、类图2、类图的作用3、类图的组成元素 2 UML中的类&#xff08;&#xff11;&#xff09;类的定义&#xff08;&#xff12;&#xff09;类的表示&#xff08;&#xff13;&#xff09;类的命名&#xff08;&#xff14;&#xff09;类的属性&#xff0…

想找一款读书笔记软件?快来试试BookxNote

去年看到网上介绍 BookxNote 是一款做读书笔记的好工具&#xff0c;被誉为“ Windows 端的 MarginNote” 。当时试用了一下感觉挺好&#xff0c;但是在笔记和书籍的存储上还有一些困惑&#xff0c;因此有点顾虑。最近看教程和自己尝试&#xff0c;解决了困惑&#xff0c;在此分…

做笔记软件

做笔记软件 找最好的笔记软件:三强篇(EverNote、Mybase、Surfulater) [转载请保留] 版本1.0 编译xbeta/善用佳软 出自 http://blog.sina.com.cn/u/46dac66f01000b57 寻找最好的笔记软件&#xff1a;三强篇(EverNote、Mybase、Surfulater) v1.0 作者: SuperboyAC 编译: xbe…

【笔记软件obsidian】从入门到精通

目录 一.前言 二.下载及安装,基本使用方法 三.完成第一篇笔记&#xff08;重点&#xff09; 四.【选修】ios用户如何通过iCloud进行三平台同步 五.基本Markdown语法&#xff08;一定要看完&#xff01;&#xff09; 六.结语 一、前言&#xff1a; 最近被很多同学问到&#xff…

计算机记笔记软件是什么,电脑记笔记软件哪个好(适合学生做笔记的软件)

瞬息万变的世界&#xff0c;软件的更迭也风起云涌。各色各样的软件层出不穷让人眼花缭乱&#xff0c;一次又一次的更新让人应接不暇&#xff0c;还没弄清一个软件的用法又被另一个软件吸引了目光。这种现象无论是在 软件介绍 1. XMind XMind 是一款思维导图软件&#xff0c;他支…

几个离线笔记软件推荐

eDiary 官网&#xff1a;http://www.haoxg.net/ eDiary的作用不仅仅在于写日记&#xff0c;您也可以用它来记流水帐、写工作日志&#xff0c; 记录学习心得&#xff0c;或者用它来管理你的日常文档。eDiary以时间为主线&#xff0c;以文 字为载体&#xff0c;记录你的心路历程…

Notion 程序猿必备笔记软件

我发现工作时间比较久的人&#xff0c;都会逐渐养成记笔记的习惯&#xff0c;我也是&#xff0c;我之前已经使用国内某云笔记8年之久&#xff0c;而且是多年的会员。但我今天要给大家推荐另一款笔记软件——Notion&#xff0c;国内可能Notion的使用还比较少&#xff0c;但它却在…