函数指针数组

news2024/9/22 5:34:15

前面学习过数组 指针数组:用来存放数组指针(地址)的数组

int main()
{
	int arr1[] = { 0 };
	int arr2[] = { 0 };
	int arr3[] = { 0 };
	int* p[3] = { arr1,arr2,arr3 };//指针数组


	return 0;
}

那么函数指针数组,就是用来存放几个类型相同的函数地址(指针)的数组
我们用代码写一个计算器的例子:
在这里插入图片描述
函数指针数组的使用——计算器
之前我们想写一个简单的计算器是这样的:

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 x / y;
}
void menu()
{
	printf("************************\n");
	printf("******1.add 2.sub ******\n");
	printf("******3.mul 4.div*******\n");
	printf("******0.exit     *******\n");

}
int main()
{
	int stup = 0;
	int x = 0;
	int y = 0;
	int ret = 0;
	do
	{
		menu();
		printf("请选择>");
		scanf("%d", &stup);
		switch (stup)
		{
		case 1:
			printf("请输入两个操作数>");
			scanf("%d %d", &x, &y);
			ret=ADD(x, y);
			printf("ret= %d\n", ret);
			break;
		case 2:
			printf("请输入两个操作数>");
			scanf("%d %d", &x, &y);
			ret = Sub(x, y);
			printf("ret= %d\n", ret);
			break;
		case 3:
			printf("请输入两个操作数>");
			scanf("%d %d", &x, &y);
			ret = Mul(x, y);
			printf("ret= %d\n", ret);
			break;
		case 4:
			printf("请输入两个操作数>");
			scanf("%d %d", &x, &y);
			ret = Div(x, y);
			printf("ret= %d\n", ret);
			break;
		case 0:
			printf("退出计算器>\n");
			break;
		default:
			printf("选择错误,请重新选择>\n");
			break;
		}
	} while (stup);
	//int(*p[4])(int, int) = { ADD,Sub,Mul,Div };
	return 0;
}

运行结果:
在这里插入图片描述
上述代码虽然可以实现计算机的功能但是我们发现
在这里插入图片描述
这段代码中出来函数名发生改变,其他的都没变,显的有一点冗余

那么我们是不是可以写一个函数指针数组来把这几个函数的地址存放在同一数组中,当想使用那个函数时,只需要找到这个函数地址对用的下标,然后就可以实现函数的调用了呢

利用此思路,我们来改造计算器代码

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 x / y;
}
void menu()
{
	printf("************************\n");
	printf("******1.add 2.sub ******\n");
	printf("******3.mul 4.div*******\n");
	printf("******0.exit     *******\n");

}
int main()
{
	int stup = 0;
	int x = 0;
	int y = 0;
	int ret = 0;
	int(*arr[5])(int, int) = {NULL,ADD,Sub,Mul,Div};
do
{
		menu();
		printf("请选择>");
		scanf("%d", &stup);
		
			if (stup >= 1 && stup <= 4)
			{
				printf("请输入两个操作数>\n");
				scanf("%d %d", &x, &y);
				ret = arr[stup](x, y);
				printf("ret= %d\n", ret);
			}else if(stup==0)
			{
				printf("退出计算器");
			}
			else
			{
				printf("选择错误重新选择>\n");
			}
} while (stup);
		
	return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/815265.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

application.yml 或 application.properties 配置文件乱码问题

一、idea写application.yml配置文件&#xff0c; 用到了中文注释&#xff0c;写的时候好好地&#xff0c;但是运行项目后&#xff0c;出现乱码情况&#xff0c;如下&#xff1a; 二、解决方法 将文件编码方式 设置成UTF-8即可 File-Setting-Editor-File Encodings 再次运行项…

「2024」预备研究生mem-一元二次不等式恒成立高次、分次不等式(包含穿根法)

一、一元二次不等式恒成立 二、高次不等式&#xff08;包含穿根法&#xff09; 三、分次不等式 四、课后习题

蓝牙资讯|谷歌推迟上线Find My Device,需等到苹果同步跟进

谷歌今年 5 月初宣布推出“寻找我的设备”&#xff08;Find My Device Network&#xff09;&#xff0c;目标是为全球超过 10 亿台安卓设备服务&#xff0c;帮助用户寻找丢失的设备。 谷歌在今年 5 月宣布&#xff0c;Find My Device 网络将兼容 Tile、Pebblebee 和 Chipolo …

aws中opensearch 日志通(Centralized Logging with OpenSearch)2.0(一)

aws日志通2.0 实现全面的日志管理和分析功能 一体化日志摄取 &#xff1a;把aws服务器日志和应用日志传输到opensearch域中无代码日志处理 &#xff1a;在网页控制台中就可以实现数据处理开箱即用 &#xff1a;提供可视化模版&#xff08;nginx、HTTP server &#xff09; 架构…

方法的定义和格式

方法 什么是方法&#xff1f; 方法是程序中最小的执行单元 定义&#xff1a;把一些代码打包在一起&#xff0c;该过程称为方法 实际开发过程中&#xff0c;什么时候用到方法&#xff1a; 重复的代码&#xff0c;具有独立功能的代码可以抽取到方法中 实际开发中&#xff0c;方…

【容器编排】初识 Kubernetes

目录 1.简介 2.为什么需要 k8s 3.k8s 能做什么? 4.k8s 不是什么? 1.简介 摘取官网: 概述 | Kubernetes Kubernetes 这个名字源于希腊语&#xff0c;意为舵手或飞行员。k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。 Google 在 2014 年开源了 Kubernetes 项目。 Kub…

Vue3自定义封装音频播放器

&#x1f680; 本片主要讲解如何使用Vue3去封装一个音频播放器&#xff0c;以及解决在ios微信浏览器中 无法获取音频时长问题 一、效果图 二、解决在微信环境中ios无法获取音频时长问题 1、安装weixin-js-sdk cnpm i weixin-js-sdk --save2、使用&#xff0c;通过wx.ready中重…

【CAS6.6源码解析】深入解析TGT和ST的唯一ID是怎样生成的-探究ID生成器的设计

CAS作为一款企业级中央认证服务系统&#xff0c;其票据的生成是非常重要的一环&#xff0c;在票据的生成中&#xff0c;有一个比较重要的点就是为票据生成唯一ID&#xff0c;本文将深入解析CAS系统中的TGT和ST的唯一ID是怎样生成的。 文章重点分析源码的过程&#xff0c;不想看…

W2NER详解

论文&#xff1a;https://arxiv.org/pdf/2112.10070.pdf 代码&#xff1a;https://github.com/ljynlp/W2NER 文章目录 W2NER介绍模型架构解码 源码介绍数据输入格式模型代码 参考资料 W2NER 介绍 W2NER模型&#xff0c;将NER任务转化预测word-word&#xff08;备注&#xff…

基于flask旅游大数据可视化分析推荐系统-计算机毕设 附源码10903

flask旅游大数据可视化分析推荐系统 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对旅游大…

味知香VS千味央厨,谁是预制菜新王?

夏日炎炎&#xff0c;预制菜赛道的下半场也硝烟弥漫&#xff0c;可谓“冰火两重天”。 预制菜赛道两大“玩家”&#xff1a;“预制菜第一股”味知香(605089.SH&#xff09;、“餐饮供应链第一股”千味央厨(001215.SZ)均于近日公布了2023年一季报&#xff0c;其业绩有所分化。 …

3D Web轻量化渲染开发工具HOOPS Communicator是什么?

HOOPS Communicator是Tech Soft 3D旗下的主流产品之一&#xff0c;具有强大的、专用的高性能图形内核&#xff0c;是一款专注于基于Web端的高级3D工程应用程序。由HOOPS Server和HOOPS Web Viewer两大部分组成&#xff0c;提供了HOOPS Convertrer、Data Authoring的模型转换和编…

考试系统对教育评估的作用和意义

随着现代教育的发展&#xff0c;考试系统已经成为评估学生学业水平的重要工具。考试系统通过量化学生的知识掌握程度、学术能力和解决问题的能力&#xff0c;为教育评估提供了客观的数据基础。 考试系统能够帮助学校和教育部门全面了解学生的学习状况。通过考试结果&#xff0…

2023东三省“深圳杯”A题全保姆论文讲解

A题 影响城市居民身体健康的因素分析 以心脑血管疾病、糖尿病、恶性肿瘤以及慢性阻塞性肺病为代表的慢性非传染性疾病&#xff08;以下简称慢性病&#xff09;已经成为影响我国居民身体健康的重要问题。随着人们生活方式的改变&#xff0c;慢性病的患病率持续攀升。众所周知&am…

C#winform顺序打包成安装项目(VS2022)

一、在打包之前 (VS中需要包括Microsoft visual studio installer projects扩展项目) 1、在vs中找到扩展>管理扩展>搜索 installer projects 进行扩展的下载 2、右键Application Folder >点击 Add>点击项目输出>点击确认后>旁边则会生成一个主输出的文 3、…

132个心理性格趣味测试ACCESS\EXCEL数据库

今天又遇到了一个心理测试的数据库&#xff0c;这个数据库在表结构的设置上很直观&#xff0c;属于那种好的数据库结构&#xff0c;共分三个表&#xff0c;一个是测试项目描述表、一个是测试题选项得分表、一个是根据得分区间解析表&#xff0c;表与表之间通过“question_id”字…

WIFI模块常见的三种接口类型

什么是WIFI接口&#xff1a; WIFI接口是用于让设备无线连接到网络的功能&#xff0c;使你的电脑、手机、平板等设备可以通过无线信号连接到互联网或局域网。 1.USB接口 USB接口是平时见得最多的一种接口了&#xff0c;用在wifi模块上&#xff0c;它是一种通用串行总线&#…

docker如何运行容器?

文章目录 1 容器操作1.1容器相关命令1.2 创建并运行一个容器docker命令解析nacos启动成功 访问进入容器&#xff0c;修改配置文件 总结 接上集 CentOS 7安装Docker https://blog.csdn.net/qq_39017153/article/details/131955100 1 容器操作 1.1容器相关命令 容器操作的命令如…

【客户案例】云联壹云助力某保险公司搭建公有云费用管理平台

客户介绍 客户成立于 1996 年 11 月&#xff0c;现已拥有逾 2000 名员工和 12000 名营销员&#xff0c;为 280 万客户提供专业的金融保险服务。在上海、北京、广东、浙江、江苏、四川、山东、福建、重庆、辽宁、天津、湖北、河北、湖南和陕西等地的 50 多个城市稳步发展&#…

激光雷达在辅助驾驶领域正在沦为“花拳绣腿”?

摘要&#xff1a; 激光雷达的优点显而易见&#xff0c;但如何结合算法发挥出激光雷达的优势&#xff0c;我想除了主机厂以外&#xff0c;激光雷达厂商也可以主动参与&#xff0c;主动探索先进的融合感知算法&#xff0c;向行业不断证明&#xff1a;我不是个“花瓶”。 激光雷达…