深入分析C语言函数指针和回调函数(1)

今天,我们必须了解一个称为回调函数的概念。什么是回调函数?百度的权威解释如下:回调函数是通过函数指针调用的函数。
如果将函数指针(地址)作为参数传递给另一个函数,则当此指针用于调用它所指向的函数时,我们说这是一个回调函数。回调函数不是由函数的实现者直接调用的,而是在发生特定事件或条件时由另一方调用的,并用于响应事件或条件。
然后,我们来看一个示例:#include& lt; stdio.h& gt;无效print(); int main(void){void(* fuc)();  fuc =打印;  fuc(); }& nbsp; void print(){printf(“您好,世界! ");}从此示例中可以看到,我们首先定义一个函数指针fuc,该函数指针的返回值为void,然后为该函数指针分配一个值,该值是打印的第一个地址功能。当fuc获得打印的地址时,fuc的地址等于打印的地址,因此对fuc()的最终调用是:等效于调用print();那么我写的例子显然与百度的解释不一致吗?定义是:如果将函数指针(地址)作为参数传递给另一个函数,则当此指针用于调用所指向的函数时,我们说这是一个回调函数。
的确是不同的,但事实是一样的,接下来让我们看一个例子。 #include& lt; stdio.h& gt; int add_ret(); int add(int a,int b,int(* add_value)()){返回(* add_value)(a,b);} int main(void){int sum = add(3,4,add_ret); printf(“ sum:%d " sum);返回0; }& nbsp; int add_ret(int a,int b){return a + b;}从此示例中,我们看到:这不符合我们的定义吗?让我们把函数的指针(地址),这里是add_ret,作为参数int add(int a,int b,int(* add_value)()),这里的参数是int(* add_value)(),名称可以无论您想要什么,都可以使用它,但是它必须符合C语言的命名约定。
当使用此指针来调用它所指向的函数时,我们说它是一个回调函数。我们在add函数中看到return(* add_value)(a,b);这(* add_value)(a,b)等效于对指针的简单引用。
在main函数中,我们传入要实现的特定函数add_ret,此函数非常简单,就是将两个数字相加并返回,就在这里好,简单的引号等效于取出返回值中的值指针,此值返回a + b,这是我们在a和b中传递的两个数字相加的结果。 & nbsp;& nbsp;& nbsp;& nbsp;& nbsp; & nbsp;& nbsp;那么,回调函数到底是做什么的呢?在这一点上,用户和开发人员之间存在一个概念。
例如,刚才提到的add()函数。假设用户实现了add_value函数,而开发人员实现了add_value函数,则用户没有做太多的工作,只想通过开发人员实现这样的接口,然后调用开发人员实现的接口的返回值即可。
函数,然后实现我们此开发人员的功能。该开发人员有许多角色,这些角色可以是他公司的核心开发人员,也可以是其他工作的外包商。
此时,他作为开发人员的角色就可以完全实现add_value。add_ret函数被封装并加密,然后向用户抛出.so或.a,这样用户就看不到add_ret的具体实现内容,用户只需要开发人员向他提供.h和.so,以此方式,作为开发人员,他将自己实现的功能保密。
      & nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;& nbsp;我们在目录中创建三个文件main.c,vendor.c,vendor.h& nbsp;& nbsp;& nbs p;& nbsp;& nbsp;& nbsp;& amp; ; nbsp; Main.c由用户开发。 Vendor.c和vendor.h由开发人员实现。
在main.c中,代码如下: #include“ vendor.h” int add(int a,int b,int(* add_value)()){返回(* add_value)(a,b);} int main(void){int sum = add(3,4,add_ret); printf(“ sum:%d " sum);返回0; }& nbsp; vendor.c,代码如下:#include“ vendor.h” int add_ret(int a,int b){返回a + b;} vendor.h,代码如下:#ifndef __VENDOR_H #define __VENDOR_H int add_ret(int a,int b); #endif接下来,我们创建一个动态链接库,最后,开发人员密封了vendor.c的内容,并向用户提供了vendor.h。在linux下创建一个动态链接库,并将vendor.c和vendor.h打包到一个动态链接库中。

公司: 深圳市捷比信实业有限公司

电话: 0755-29796190

邮箱: tao@jepsun.com

产品经理: 陆经理

QQ: 2065372476

地址: 深圳市宝安区翻身路富源大厦1栋7楼

微信二维码

更多资讯

获取最新公司新闻和行业资料。

  • 深入解析Discrete Power Switch选型指南:关键参数与应用场景分析 Discrete Power Switch选型指南:全面解析关键参数在现代电子系统设计中,Discrete Power Switch(分立式电源开关)因其高可靠性、灵活的控制能力以及良好的热管理性能,被广泛应用于工业控制、消费电子、汽车电子和通信设备等领域...
  • 深入解析电阻负载调制如何提升数据传输可靠性 电阻负载调制技术:一种高效可靠的数据编码方式在传统数字通信中,常依赖电压或电流高低电平表示二进制信号,但此类方法易受线路阻抗变化、噪声干扰等因素影响。相比之下,电阻负载调制通过物理层对负载进行精确控制...
  • 深入解析SMD-2.0X1.2mm LED灯珠的技术参数与选型指南 全面解读SMD-2.0X1.2mm LED灯珠:从参数到应用的完整指南随着电子设备向小型化、智能化发展,对光源的要求也日益严苛。本文将围绕SMD-2.0X1.2mm LED灯珠展开深度剖析,帮助工程师与采购人员科学选型。一、关键电气与光学参数 ...
  • 深入解析光颉抗腐蚀电阻的技术参数与选型指南 如何正确选择与使用光颉抗腐蚀电阻?面对市场上众多电阻型号,正确识别并选用适合特定应用的光颉抗腐蚀电阻,是保障系统性能的关键。以下从技术参数与实际选型角度进行深度解析。1. 核心技术参数解读 参数项典型值意义...
  • 深入解析光颉MFR精密电阻的技术参数与选型指南 如何正确选择光颉MFR精密电阻?技术参数全解析面对市场上众多精密电阻品牌,了解光颉MFR系列的关键技术指标,是实现电路设计优化的重要前提。本文将从阻值范围、功率等级、容差、温度特性等方面进行深度剖析。1. 阻值范...
  • WAN2012H245C04与WAN2012F245H04数据手册深度解析:关键参数与应用指南 WAN2012H245C04与WAN2012F245H04数据手册核心概览WAN2012H245C04与WAN2012F245H04是两款广泛应用于工业控制、自动化系统及智能电网设备中的高性能电子元件。它们均属于同一产品系列,具备高度兼容性与可替代性,适用于多种复杂环境下的稳...
  • 深入解析光颉Viking FMR系列电阻器的技术参数与选型指南 光颉Viking FMR系列电阻器技术深度解析作为光颉科技(Viking)推出的高端电阻产品线,FMR系列不仅代表了金属膜电阻器的制造巅峰,更在可靠性、安全性与环境适应性方面树立了行业新标杆。以下从技术参数、选型要点和实际应用...
  • 深入解析厚膜电阻器CR..A系列的技术参数与选型指南 CR..A系列厚膜电阻器关键技术参数详解选择合适的厚膜电阻器需综合考虑多个技术指标。以下为CR..A系列的核心参数解析:关键参数一览额定功率:常见规格有1/4W、1/8W,部分型号支持更高功率输出。阻值范围:覆盖10Ω~10MΩ,支...
  • 深入解析:插件金属膜精密电阻的技术参数与选型指南 如何正确选择插件金属膜精密电阻?面对市场上种类繁多的电阻产品,准确理解插件金属膜精密电阻的技术参数,是实现电路设计优化的重要前提。以下从关键指标出发,提供实用选型建议。1. 阻值精度(Tolerance)精密电阻的核...
  • 深入解析JVR高浪涌系列电阻器的技术参数与选型指南 JVR高浪涌系列电阻器技术参数详解JVR高浪涌系列是专为严苛环境设计的压敏电阻产品线,其技术指标全面领先行业标准,是实现高效过压保护的理想选择。关键性能指标参数名称典型值单位标称电压(V1mA)100 ~ 600VDC最大持续工作...
  • 深入解析超低欧姆跳线电阻器的技术参数与选型指南 深入解析超低欧姆跳线电阻器的技术参数与选型指南在高速数字电路和精密模拟系统中,超低欧姆跳线电阻器(Ultra-Low Ohm Jumper Resistors)因其独特的电气特性,正逐步取代传统跳线结构,成为新一代电路设计的重要组件。本文将...
  • 深入解析抗硫电阻AS..A系列的参数规格与工程选型指南 抗硫电阻AS..A系列参数详解AS..A系列抗硫电阻以其严谨的参数设计和可靠的质量表现,成为工业级电子系统的重要组成部分。以下为关键参数的详细说明:主要电气参数参数项典型值测试条件标称阻值10Ω ~ 10MΩ室温25℃允许误差±1...
  • 深入解析精密贴片电阻器AR系列的技术参数与选型指南 AR系列精密贴片电阻器关键技术参数在选择适合的精密贴片电阻器时,必须关注其关键电气与物理参数。以下是AR系列的主要技术指标:1. 阻值范围与容差阻值范围覆盖1Ω~10MΩ,提供多种标准阻值系列(E96/E192),容差可选±0.1%、...
  • 深入解析:RBA汽车级薄膜片式电阻器的技术参数与选型指南 RBA汽车级薄膜片式电阻器技术参数详解选择合适的电阻器是保障汽车电子系统稳定运行的前提。以下是RBA系列关键技术参数的详细解读,帮助工程师精准选型。1. 阻值范围与精度RBA产品覆盖从1Ω到10MΩ的广泛阻值范围,标准精度等...
  • 深入解析光颉Viking LRP系列合金电阻器的技术参数与选型指南 光颉Viking LRP系列技术参数详解在选择适合特定应用的大功率电阻器时,了解其关键技术指标至关重要。以下是光颉Viking LRP系列的主要参数说明:关键参数一览额定功率:从10W至100W不等,覆盖多种功率需求场景。阻值范围:1Ω~...
  • 深入解析LM系列端子类型与参数:选型与应用全指南 LM系列端子概述LM系列端子是工业自动化和电气连接领域中广泛应用的一类标准连接器件,以其高可靠性、紧凑设计和优异的导电性能著称。该系列端子广泛应用于配电箱、控制柜、PLC系统及各类机械设备中,是实现信号与电源可...
  • 铜合金的电阻率和温度系数等电阻参数和其他常用材料系数 铜的电阻率温度系数 1、简介 铜的电阻率温度系数是多少呢?铜的电阻率温度系数定义是什么呢?我们先来纠正下“铜的电阻率温度系数”这个词。铜的电阻率温度系数其实正确的叫“铜的电阻温度系数”。下面介绍到的铜的电...
  • 深入解读HELI 2mA LED的技术参数与选型指南 HELI 2mA LED关键参数详解在选用HELI 2mA系列LED时,了解其核心技术参数至关重要。这些参数直接影响产品的性能表现与系统兼容性。主要电气与光学参数额定正向电流:2mA(典型值),可在1.8mA~2.5mA范围内安全工作。正向电压(Vf)...
  • 深入理解硅基ESD保护管的技术参数与选型指南 如何正确选择合适的硅基ESD保护管?面对市场上种类繁多的硅基ESD保护管,工程师需根据具体系统需求进行科学选型,以确保最佳防护效果与成本平衡。本文将从关键参数出发,提供实用的选型建议。一、核心技术参数解析参数...
  • SMD-1.0X0.5mm LED灯珠参数详解与应用优势分析 SMD-1.0X0.5mm LED灯珠核心技术参数解析SMD-1.0X0.5mm LED灯珠是一种超小型表面贴装发光二极管,广泛应用于高密度LED显示、智能穿戴设备及微型指示灯领域。其核心参数包括:1. 尺寸规格该灯珠的封装尺寸为1.0mm × 0.5mm,属于目前市场...