【回调函数】
1.回调函数是什么?
回调函数就是⼀个通过函数指针调用的函数。
如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被用来调用其所指向的函数
时,被调用的函数就是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发⽣时由另外的⼀方调用的,用于对该事件或条件进⾏响应。
只有调⽤函数的逻辑是有差异的,我们可以把调⽤的函数的地址以参数的形式传递过去,使⽤函数指针接收,函数指针指向什么函数就调⽤什么函数,这⾥其实使⽤的就是回调函数的功能。
接下来是一个简易计算器(利用回调函数)
#include <stdio.h>
int add(int a, int b)
{return a + b;
}
int sub(int a, int b)
{return a - b;
}
int mul(int a, int b)
{return a * b;
}
int div(int a, int b)
{return a / b;
}void calc(int(*pf)(int, int))
{int x, y;int ret = 0;printf("输入操作数:");scanf("%d %d", &x, &y);ret = pf(x, y);printf("ret = %d\n", ret);
}int main()
{int input = 1;do{printf("*************************\n");printf(" 1:add 2:sub \n");printf(" 3:mul 4:div \n");printf("********0. exit *********\n");printf("请选择:");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");break;default:printf("选择错误\n");break;}} while (input);return 0;
}
图
下面是改造后的方法(利用数组函数进行优化,方便,减少冗余)
//加法
int add(int a, int b)
{return a + b;
}
//减法
int sub(int a, int b)
{return a - b;
}
//乘法
int mul(int a, int b)
{return a * b;
}
//除法
int div(int a, int b)
{return a / b;
}
//菜单
void menu()
{printf("*****************************\n");printf("********1.add 2.sub********\n");printf("********3.mul 4.div********\n");printf("******** 0.exit **********\n");printf("*****************************\n");
}
int main()
{int* (*pfArr[])(int, int) = {NULL,add ,sub,mul,div};//函数指针数组,存放函数int input = 0;int x = 0;int y = 0;int ret = 0;do {menu();printf("请选择");scanf("%d", &input);if (input >= 1 && input <= 4) {printf("请输入两个操作数:");scanf("%d %d", &x, &y);ret = pfArr[input](x, y);//这里进行调用函数数组里面的函数printf("%d\n",ret);}else if(input==0){printf("退出\n");}else {printf("选择错误,重新选择");}} while (input);return 0;
}
相关文章:
【回调函数】
1.回调函数是什么? 回调函数就是⼀个通过函数指针调用的函数。 如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被用来调用其所指向的函数 时,被调用的函数就是回调函数。回调函数不是由该函数的实现方…...
找树左下角的值-力扣
本题个人认为不能叫做 找树左下角的值,左下角再怎么说也应当在树的左子树上,本题要求的节点是树最底层最左边的值。 首先想到的解法是对二叉树进行层序遍历,并记录本层第一个节点的值,当层序遍历结束时,此时记录的值即…...
【AI应用探讨】— Gemma2模型应用场景
目录 1. 金融风险管理 2. 营销策略优化 3. 医疗保健领域 4. 供应链管理 5. 人力资源管理 6. 自然语言处理(NLP) 7. 图像识别 8. 音频信号处理 9. 总结 1. 金融风险管理 场景描述:Gemma 2模型在金融领域可用于预测金融市场的波动性和…...
树二叉树
树 树是 n(n≥0)个结点的有限集。当 n 0时,称为空树。在任意一颗非空树中应满足: (1)有且仅有一个特定的称为根的结点。 (2)当 n > 1时,其余结点可分为 m&…...
无源晶振振荡电路失效问题分析与解决策略
无源晶振(晶体谐振器)在电子设备中扮演着至关重要的角色,为数字电路提供稳定的时钟信号。然而,振荡电路一旦失效,可能会导致整个系统运行不正常。晶发电子将从三个主要方面分析无源晶振振荡电路失效的问题,…...
LIMS系统在汽车第三方检测实验室的应用
随着汽车行业的快速发展,汽车第三方检测实验室的工作量不断增加,对实验室的管理效率和数据准确性提出了更高的要求。LIMS系统的引入可以实现实验室的全面数字化管理,提高工作效率,降低运营成本,并提升数据质量与决策支…...
positivessl泛域名https证书
PositiveSSL,作为Sectigo旗下的子品牌,一直以来颁发的https数字证书产品性价比较高,适合大多数个人网站和中小型企业。其中,DV基础型的泛域名https证书以申请简单、颁发速度快、价格低受到众多用户的欢迎。今天就随SSl盾小编了解P…...
MySQL bin-log日志恢复数据
目录 一、开启二进制日志 二、检查二进制日志是否开启 三、使用二进制日志备份和恢复 使用二进制日志备份恢复前先创建备份: 应用二进制日志: 扩展用法: 四、常见命令和操作 五. 使用 mysqlbinlog 工具查看二进制日志 1. 查看二进制…...
Linux网络命令——netstat
netstat是Linux系统中非常有用的网络工具,被称为是网络监控中的军工刀,足见其地位。 传统上,它用于问题确定而不是性能测量,但是也可用于查看网络上的流量,以确定性能问题是否由于网络阻塞引起。 netstat用于显示与I…...
手机怎么压缩图片?通过三种压缩操作
手机怎么压缩图片?在智能手机日益普及的今天,拍照分享已成为日常生活的一部分。然而,高质量的照片往往占用较大的存储空间,且在网络上传输时速度较慢。那么,如何在手机上压缩图片呢?本文将介绍三种实用的手…...
分布式CAP、BASE理论务必了解一下
分布式系统理论是计算机科学中的一个重要分支,它关注如何设计和实现能够跨多个物理或逻辑位置运行的系统。在分布式系统中,CAP定理和BASE理论是两个非常著名的理论,它们分别描述了分布式系统设计中的一些基本约束和原则。 CAP定理 CAP定理&…...
spring最常用的注解
核心注解 Component 描述:将类标记为 Spring 组件,以便自动检测。用途:通常用于标注服务类或其他支持类。 Controller 描述:将类标记为 Spring MVC 控制器。用途:用于处理 Web 请求。 Service 描述:将类标记…...
Docker:认识镜像仓库及其命令
文章目录 Docker Registry什么是Docker Registry 镜像仓库工作机制使用流程实际使用方法仓库的拉取机制 常用的镜像仓库---DockerHub什么是DockerHub私有仓库 镜像仓库命令docker logindocker pulldocker pushdocker searchdocker logout Docker Registry 什么是Docker Regist…...
使用 Django 创建 App
文章目录 步骤 1:创建 Django 项目步骤 2:创建 App步骤 3:配置 App步骤 4:编写代码步骤 5:运行服务器 在 Django 中,App 是组织代码的基本单元,它可以包含模型、视图、模板等组件,帮…...
java定时任务 设置开始时间、结束时间;每周一、四、六执行;并且隔n周执行。最后计算所有执行时间
java定时任务 设置开始时间、结束时间;每周一、四、六执行;并且隔n周执行。最后计算所有执行时间) 定时任务需求程序设计依赖引入程序一、计算开始时间那周的周一时间二、根据executeTime和weekList.get(n),计算每个cron表达式。三、根据一和…...
linux的持续性学习
安装php 第一步:配置yum源 第二步:下载php。 yum install php php-gd php-fpm php-mysql -y 第三步:启动php。 systemctl start php-fpm 第四步:检查php是否启动 lsof -i :9000 计划任务 作用&am…...
MyBatis:概念简章
1. hello world 配置文件:mybatis-config.xml(核心配置文件,用于配置连接的数据库信息)(一般一个)XxxMapper.xml 该文件用于操作表(执行sql语句)(一张表一个)…...
有什么接码平台比较好用的
接码平台,也被称作短信接收平台或虚拟号码服务,主要是提供可以接收短信验证码的虚拟手机号码服务。这种服务通常被用于需要在网络平台上注册大量账号的情况,如营销推广、应用测试或是海淘购物时所需的手机号验证。下面将推荐几个较为好用的接…...
微服务之负载均衡器
1、负载均衡介绍 负载均衡就是将负载(工作任务,访问请求)进行分摊到多个操作单元(服务器,组件)上 进行执行。 根据负载均衡发生位置的不同, 一般分为服务端负载均衡和客户端负载均衡。 服务端负载均衡指的是发生在服务提供者一方ÿ…...
《时间管理九段》前四阶段学习笔记
文章目录 0.何谓时间管理九段0.1 第一段--把一件事做好0.2 第二段--把一天过好0.3 第三段--掌控两周内的固定日程0.4 第四段--掌控两周内的弹性时间0.5 第五段--科学管理3个月的项目事件0.6 第六段--实现一年的梦想0.7 第七段--明确一生的愿景0.8 第八段--正确补充和释放自身能…...
LLVM Cpu0 新后端5 静态重定位 动态重定位
想好好熟悉一下llvm开发一个新后端都要干什么,于是参考了老师的系列文章: LLVM 后端实践笔记 代码在这里(还没来得及准备,先用网盘暂存一下): 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…...
旅游卡是项目还是骗局?还是实实在在的旅游项目?
旅游卡是一个实实在在的旅游项目,而非骗局。以下是我对旅游卡项目的几点分析: 项目实质: 旅游卡项目是由国内外多条旅游线路整合而成的卡片,为旅游者提供方便、实惠的旅游方式。持有旅游卡,可以完全抵销跟团游线路中的…...
大模型+RAG,全面介绍!
1 、介绍 大型语言模型(LLMs)在处理特定领域或高度专业化的查询时存在局限性,如生成不正确信息或“幻觉”。缓解这些限制的一种有前途的方法是检索增强生成(RAG),RAG就像是一个外挂,将外部数据…...
智能合约中存储和计算效率漏洞
存储和计算效率 不当的存储结构或计算密集型操作可能导致高Gas费用和性能瓶颈。示例场景:频繁读取和写入大数组 假设你正在构建一个投票系统,其中每个提案都有一个独立的计票器。为了实现这一点,你可能最初会考虑使用一个映射(m…...
软件测试基础知识总结
🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、软件测试概述 1、什么是软件 定义:计算机系统中与硬件相互依存的一部分&#x…...
C语言 | Leetcode C语言题解之第143题重排链表
题目: 题解: struct ListNode* middleNode(struct ListNode* head) {struct ListNode* slow head;struct ListNode* fast head;while (fast->next ! NULL && fast->next->next ! NULL) {slow slow->next;fast fast->next-&g…...
探寻性能优化:如何衡量?如何决策?
目录 一、衡量指标说明 (一)响应时间(Response Time) 平均响应时间(Average Response Time) 百分位数响应时间(Percentile Response Time) (二)吞吐量&a…...
Python Django 5 Web应用开发实战
Django 是一个高级 Python Web 框架,它鼓励快速开发和简洁、务实的设计。下面是一个关于如何使用 Django 开发一个包含五个基本页面的 Web 应用的实战指南。请注意,这里仅提供一个概述,实际开发中会有更多细节和步骤。 1. 安装 Django 首先,你需要安装 Django。你可以使用…...
H.264官方文档下载
H.264是ITU(International Telecommunication Union,国际通信联盟)和MPEG(Motion Picture Experts Group,运动图像专家组)联合制定的视频编码标准。其官方文档可以在ITU官网上下载:https://www.…...
minio多节点部署
MinIO 是一个高性能的分布式对象存储服务,它可以配置为多节点(或多服务器)模式以提供高可用性和数据冗余。以下是一个基本的多节点MinIO部署示例: 确保你有多个服务器或虚拟机。在每个节点上安装MinIO。使用minio server命令启动多…...
凡科网做网站要钱吗/成都网站seo性价比高
1、前言分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一。对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,常常对这个问题摸不着头绪,因此特地撰写此…...
企业网站设计建设长春/b站视频未能成功转码
为了测试算法方便,想让linux开机后在字符模式下,启动自己指定的程序。这里我采用将算法配置成系统服务的形式,使系统在其后后自动执行。具体实施分为以下两步: 1,自定义开机启动服务,可以参考我的前一篇文章…...
delphi xe10网站开发/搜索数据
直接上代码… /*** author gxq* date * <p>* 自定义注解(实现数据库查询,接口访问权限一系列)*/ Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE}) //表示此作用作用的目标&…...
wordpress怎么套模板/什么是关键词搜索
屏幕快照 2016-09-22 12.00.37.png选中CoreData再右边,有个language选项,选择你要的语言类型,然后再去点击 屏幕快照 2016-09-22 12.02.02.png上方Editor选中Create NSManageredObject Subclass就可以了。1,Swift中使用OC的类建立…...
怎么做网站开发/常州网络推广seo
通过使用数据库服务器端的sqlnet.ora文件可以实现禁止指定IP主机访问数据库的功能,这对于提升数据库的安全性有很大的帮助,与此同时,这个技术为我们管理和约束数据库访问控制提供了有效的手段。下面是实现这个目的的具体步骤仅供参考…...
网站怎样做银联支付/如何注册域名网站
网易云音乐常用API浅析 转载于:https://www.cnblogs.com/goodboy-heyang/p/5170190.html...