C语言中的回调函数 以及应用

C语言:回调函数 延迟执行:回调函数在特定条件触发后才被执行,而非立即执行,这对于异步编程尤为重要,如网络请求、定时任务等。松耦合:通过回调函数,调用方和被调用方之间解耦,调用方无需了解被调用方的具体实现,只需要提供符合约定的回调函数接口即可。事件驱动:回调函数广泛应用于事件驱动编程中,例如窗口系统、GUI编程、Web前端JavaScript中的事件监听等,当事件触发时,预先定义好的回调函数会被调用。多态性和扩展性:回调函数允许用户自定义行为,增强了程序的多态性和扩展性。例如,在C语言中,通过函数指针传递回调函数; 阅读详情

定义

回调函数就是一个  通过函数指针调用的函数。 如果你把函数的指针也就是地址 作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就可以说这是回调函数。

注意

回调函数不是有该函数的实现方直接调用,而是再特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应

看不懂没关系 先继续看↓

实例应用: 

我们先用常规思路写一个能简单实现加减乘除的计算器

#include<stdio.h>
void menu()
{
	printf("****************************\n");
	printf("****0.exit 1.add************\n");
	printf("****2.sub  3.mul************\n");
	printf("****4.div       ************\n");
	printf("****************************\n");

}
int add(int x, int y)
{
	return x + y;
}
int sub(int x, int y)
{
	return x - y;
}
int mul(int x, int y)
{
	return x * y;
}
int div(int x, int y)
{
	return 0;
}
int main()
{
	int input = 0;
	int x = 0;
	int y = 0;
	int ret = 0;
	do
	{
		menu();
		printf("请选择\n");
		scanf("%d ", &input);
		switch (input)
		{
		case 1:
			scanf("%d %d", &x, &y);
			ret = add(x, y);
			printf("%d\n", ret);
			break;
		case 2:
			scanf("%d %d", &x, &y);
			ret = sub(x, y);
			printf("%d\n", ret);
			break;
		case 3:
			scanf("%d %d", &x, &y);
			 ret = mul(x, y);
			printf("%d\n", ret);
			break;
		case 4:
			scanf("%d %d", &x, &y);
			 ret = div(x, y);
			printf("%d\n", ret);
			break;
		case 0:
			printf("退出计算器\n");
		default:
			printf("选择错误 请重新选择\n");
		}
	} while (input);
	return 0;
}

可以看到再switch的case语句中有大量的冗余 如何改进他就需要用到回调函数了

 下面给出改进后的代码

#include<stdio.h>
void menu()
{
	printf("****************************\n");
	printf("****0.exit 1.add************\n");
	printf("****2.sub  3.mul************\n");
	printf("****4.div       ************\n");
	printf("****************************\n");

}
int add(int x, int y)
{
	return x + y;
}
int sub(int x, int y)
{
	return x - y;
}
int mul(int x, int y)
{
	return x * y;
}
int div(int x, int y)
{
	return 0;
}
void calc(int (*pa)(int , int))
{
	int x = 0;
	int y = 0;
	int ret = 0;
	scanf("%d %d", &x, &y);
	ret = pa(x, y);
	printf("%d\n", ret);
}
int main()
{
	int input = 0;
	do
	{
		menu();
		printf("请选择\n");
		scanf("%d ", &input);
		switch (input)
		{
		case 1:
			calc(add);
			break;
		case 2:
			calc(sub);
			break;
		case 3:
			calc(mul);
			break;
		case 4:
			calc(div);
			break;
		case 0:
			printf("退出计算器\n");
		default:
			printf("选择错误 请重新选择\n");
		}
	} while (input);
	return 0;
}


我们再结合一下回调函数的定义 回调函数作为参数传参 通过函数指针调用的函数 pa为函数指针 能够调用add,sub等函数 所以add,sub,mul,div为回调函数

 

C语言--回调函数 回调函数,光听名字就比普通函数要高大上一些,那到底什么是回调函数呢?恕我读得书少,没有在那本书上看到关于回调函数的定义。我在百度上搜了一下,发现众说纷纭,有很大一部分都是使用类似这么一个场景来说明:A君去B君店里买东西,恰好缺货,A君留下号码给B君,有货时通知A君。感觉这个让人更容易想到的是异步操作,而不是回调。另外还有两句英文让我印象深刻:1) If you call me, I will call you back; 阅读详情

相关推荐

C语言中的回调函数及应用场景

1. 回调函数:如果参数是一个函数指针,调用者可以传递一个函数的地址给实现者,即调用者提供一个函数但自己不去调用它,而是让实现者去调用它,这称为回调函数(Callback Function)。 2. 以上的概念叙述很难让你明白,回调函数到底是怎么一回事儿,下面我通过一个实例描述一下,请耐心看下去: 此示例由三个文件组成:para_callback.h、para_callback.c、callb

zhangcan919的专栏 3152

【C语言】回调函数

回调函数 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 随着我们对C语言的学习以及对指针更加深入的了解,我们避免不了接触到回调函数,以下是关于回调函数的知识分享。 一、回调函数是什么? 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个 函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数.

m0_62179366的博客 1万+

C语言回调函数在TCP客户端中的应用与实践

回调函数是编程中实现事件驱动和异步处理的核心机制,通过函数指针将特定逻辑注入到通用流程中。在C语言中,回调函数基于函数指针实现,为模块解耦和事件处理提供了灵活方案。TCP网络编程中,回调函数常用于异步数据接收处理,如示例中的recv_callback机制。这种设计模式能有效分离网络I/O与业务逻辑,配合多线程和poll系统调用实现高效事件循环。实际开发需注意线程安全、资源管理和执行效率,这种回调架构也适用于GUI事件处理、定时任务等场景。

weixin_42610010的博客 558

C语言回调函数详解(全网最全)

如上述代码:可以看到,Handle()函数里面的参数是一个指针,在main()函数里调用Handle()函数的时候,给它传入了函数Callback_1()/Callback_2()/Callback_3()的函数名,这时候的函数名就是对应函数的指针,也就是说,回调函数其实就是函数指针的一种用法。结合这幅图和上面对回调函数的解释,我们可以发现,要实现回调函数,最关键的一点就是要将函数的指针传递给一个函数(上图中是库函数),然后这个函数就可以通过这个指针来调用回调函数了。

modi000的博客 2491

光学设计必知:Ansys Zemax中6种系统孔径类型的适用场景全解析

本文深入解析Ansys Zemax中6种系统孔径类型的适用场景,包括入瞳直径、像方空间F/#、物方空间NA等,帮助光学设计师精准控制光线选择和成像质量。通过实际案例和代码示例,详细讲解各孔径类型的计算原理、参数设置及在显微系统、激光扩束等场景中的优化策略,提升复杂光学系统设计效率。

weixin_29266007的博客 552

基于Joplin和Joplin Server搭建私有云笔记

我们知道,多端同步功能是笔记工具最重要的功能。只有实现了多端同步,我们才能在工作电脑和手机之间无缝切换笔记体验。Joplin 在同步上做得不错,支持 Dropbox、OneDrive 和 AWS s3(当然国内都没法用),支持 WebDAV 协议,也支持自家的 Joplin Server。 本文介绍如何在自己的服务器上搭建 Joplin Server,并配置好 Joplin Desktop 的同步功能。 前置条件 安装docker 创建 Joplin Server 配置文件 创建配置文件,~/docke

代码时光 1万+

C语言-回调函数的应用

回调函数就是一个被作为参数传递的函数。在C语言中,回调函数只能使用函数指针实现,在C++、Python、ECMAScript等更现代的编程语言中还可以使用仿函数或匿名函数。

qq_19343801的博客 641

告别Keil?在Mac上配置STM32CubeIDE + CMSIS-DAP调试器全攻略(含常见报错解决)

本文详细介绍了在Mac平台上配置STM32CubeIDE与CMSIS-DAP调试器的全流程,包括硬件准备、软件安装、工程创建及调试优化。通过实战指南,帮助开发者高效完成STM32开发,解决常见报错问题,提升开发效率。

weixin_30485379的博客 433

c语言回调函数 有什么作用,C语言中的回调函数及应用场景

1.回调函数:如果参数是一个函数指针,调用者可以传递一个函数的地址给实现者,即调用者提供一个函数但自己不去调用它,而是让实现者去调用它,这称为回调函数(Callback Function)。2. 以上的概念叙述很难让你明白,回调函数到底是怎么一回事儿,下面我通过一个实例描述一下,请耐心看下去:此示例由三个文件组成:para_callback.h、para_callback.c、callback.c...

weixin_39607447的博客 851

软件测试--用例篇(测试用例的好处、测试用例的七种设计方法、测试用例的粒度、测试用例的评价)

作为软件测试工程师,最主要的工作就是:编写测试用例,那么为什么要编写测试用例?它有什么好处?如何编写测试用例?测试用例写简单好还是复杂好?如何评价测试用例的质量? 天呐撸!能说不会吗?! 作为倾向软件测试工程师的老铁们,还是一起来学习吧! 一、编写测试用例的好处 测试用例是测试者的依据 测试用例使得工作可重复,是自动化测试的基础 补充:自动化测试的前提条件是:功能比较稳定,页面...

cherrydreamsover的博客 3734

8.时间序列预测

目标:使用历史数据预测未来的销售额。通过以上步骤,可以在Excel中有效进行预测分析,帮助做出更准确的决策通过考虑不同时期数据的影响,可以显著提高预测的准确性。结合多种方法和模型,可以灵活应对复杂的市场环境和变化。

学习,输出==》再学习再输出 891

C语言函数指针与回调函数的应用实践

本文介绍了C语言中函数指针与回调函数的应用。主要内容包括:函数指针的定义语法、间接调用函数的方法,以及如何通过typedef简化函数指针类型;详细讲解了函数指针作为参数传递的实现方式,并提供了计算器函数的示例;重点阐述了回调函数的原理与两种实战案例:数组遍历回调实现元素处理和排序算法回调实现升序/降序选择。这些技术能够显著提升代码的灵活性和扩展性,是C语言编程中的重要技巧。

今天比昨天更努力一点! 3万+

YOLOv8改进:在C2F模块中引入RepGhost Bottleneck模块

C2F类是YOLOv8中的C2F模块的实现,它包含一个RepGhostBottleneck模块、一个卷积层和一个批归一化层。通过在C2F模块中引入RepGhost Bottleneck模块,我们可以在保持计算效率的同时提升模型的表达能力。这是因为RepGhost Bottleneck模块通过引入重复的卷积核来扩展模型的感受野,从而增加了模型对不同尺度目标的感知能力。RepGhost Bottleneck是一种用于卷积神经网络的改进模块,它可以在保持计算效率的同时提升模型的表达能力。希望以上内容对你有帮助!

IlgCrystal的博客 1306

【C语言】深入解析C语言中的回调函数及其应用

回调函数的概念可能有些抽象,让我们尝试用一个简单的生活场景来解释它。假设你有一项重要任务需要完成,但任务的一部分要依赖于其他人完成的工作。你可以留下一个手机号码,当对方完成任务后,他们会给你打电话通知你。在这个场景中,你的手机号就是回调函数,你留给对方的方式告诉他们完成任务后与你联系。

Goforyouqp的博客 1万+

对接金蝶云星空调用即时库存信息查询API(附JAVA实现)

这篇文章教你如何对接金蝶API并且使用JAVA调用金蝶云星空的即时库存查询API

实用的博客 2608

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【C语言指南】回调函数:概念与实际应用的深度剖析

,回调函数是一颗独特而耀眼的星辰。它为我们的代码赋予了更高的灵活性和扩展性,让程序能够根据不同的需求执行不同的逻辑。回调函数在各种领域都有着广泛的应用,无论是操作系统开发、嵌入式系统编程,还是图形界面设计,都能看到它的身影

2301_76297596的博客 1347

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C语言回调函数的实现与应用(保姆级讲解)

回调函数 1. 回调函数是什么? 百度有一大堆关于回调函数的定义和概念,我们直接说人话,让大家通俗易懂。 打个比方:你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。回答完毕。 2. 回调函数怎么实现(C语言)? 在其他博客或者帖子

Dev_XH 's HOME 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C语言进阶:回调函数与qsort的熟练应用

本文分享了回调函数和qsort排序函数的学习心得。回调函数是通过函数指针调用的函数,可以实现灵活的函数调用。qsort是C语言中的通用排序函数,采用快速排序算法,支持任意数据类型排序。作者以冒泡排序为例,详细说明了如何改进使其支持结构体排序:通过void*指针接收不同类型数据,使用比较回调函数实现元素比较,并完成交换操作。文章最后鼓励读者指出问题并进行补充。这个分享为初学者理解通用排序实现提供了实用参考。

xuedingbue的博客 1174

《从回调函数到 qsort:C 语言指针高级应用全攻略》

回调函数就是一个通过函数指针调用的函数示例如下int Add(int x, int y)//回调函数Addint main()text(Add);//text是调用Add的那方return 0;其中Add被称为回调函数即如果你把函数的指针(地址)作为参数传递给另一个函数 当这个指针被用来调用其所指向的函数时 被调用的函数就是回调函数 回调函数不是由该函数的实现方调用 而是在特定的事件或条件发生时由另外的一方调用的 用于对该事件或条件进行响应qsort是 C 标准库(

2403_87212593的博客 1565

C语言学习及应用笔记之七:C语言中的回调函数及使用方式

  我们在使用C语言实现相对复杂的软件开发时,经常会碰到使用回调函数的问题。但是回调函数的理解和使用却不是一件简单的事,在本篇我们根据我们个人的理解和应用经验对回调函数做简要的分析。 1、什么是回调函数   既然谈到了回调函数,首先我们就要搞清楚什么是回调函数。在讨论回调函数之前,我们需要说明另一个概念,那就是函数指针。什么是函数指针呢?说的浅显一点,函数指针就是指向函数的指针,说白了也是一种...

weixin_30652879的博客 108

【C语言进阶篇】回调函数详解 (应用实例)

上一章我们学习了函数指针,而函数指针最大的用处就是回调函数的应用!今天我们就来点干货回调函数的应用,和如何改进代码!

鸽芷咕的博客 861

C语言初学者笔记【回调函数(指针应用)】

核心主题:回调函数、qsort应用与模拟实现

Aphrodite_c的博客 485

c语言注册回调函数主要用途,C语言回调函数的概念及其应用

笔者能力有限,如果文中有错误的地方,欢迎各位朋友给我及时地指出来,我将不甚感激,谢谢~概念引用维基百科上的关于回调函数的概念:在计算机程序设计中,回调函数,或简称回调(Callback 即call then back 被主函数调用运算后会返回主函数),是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。打一个简单的例子就是说,如果我们在一个 RT...

weixin_29474217的博客 2063

C语言应用笔记(七):C语言中的回调函数和使用方式

在使用 C 语言实现相对复杂的软件开发时,经常会碰到使用回调函数的问题。但是回调函数的理解和使用却不是一件简单的事,这里根据个人的理解和应用经验做浅显的分析。(一)什么是回调函数 既然谈到了回调函数,那什么是回调函数呢?在讨论回调函数之前,需要说明另一个概念,那就是函数指针。什么又是函数指针?简单来讲,函数指针就是指向函数的指针,是不是跟没讲一样。说白了也是一种指针,只是它指向的不是整形、浮点型...

JunoFly 4838
上一篇: C语言中隐式类型转换 截断和整型提升
下一篇: C语言中结构体的内存对齐
刘 大 望
博客等级 码龄2年 896粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值