当前位置: 首页 > news >正文

深入理解指针(7)--计算机模拟实现

f78d07a6d5424c3ebb810a827448e321.png

1  .计算机的简易实现

想要实现计算机的简易实现,这里讲两种方法,第一种是不用指针知识,第二种为用指针知识


1.不用指针的计算机实现


#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
void menu() {printf("********************\n");printf("***1.add    2.sub***\n");printf("***3.mul    4.div***\n");printf("***0.exit        ***\n");printf("********************\n");
}
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;
}int main()
{int input = 0;int a = 0, b = 0;int ret = 0;//这里可以存放多个函数地址do {menu();scanf("%d", &input);switch (input) {case 1:printf("请输入两个数\n");scanf("%d %d", &a, &b);ret = add(a, b);printf("结果是%d\n", ret);break;case 2:printf("请输入两个数\n");scanf("%d %d", &a, &b);ret = sub(a, b);printf("结果是%d\n", ret);break;case 3:printf("请输入两个数\n");scanf("%d %d", &a, &b);ret = mul(a, b);printf("结果是%d\n", ret);break;case 4:printf("请输入两个数\n");scanf("%d %d", &a, &b);ret = div(a, b);printf("结果是%d\n", ret);break;}} while (input);if (input == 0) {printf("您已退出");}
}

注意事项:避免变量多次重复定义


2.用指针的计算机实现


#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
void menu() {printf("********************\n");printf("***1.add    2.sub***\n");printf("***3.mul    4.div***\n");printf("***0.exit        ***\n");printf("********************\n");
}
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;
}int main()
{int input = 0;//这里可以存放多个函数地址int (*p[5])(int a, int b) = { 0,add,sub,mul,div };do {menu();scanf("%d", &input);if (input<=4&&input>=1) {printf("请输入两个数\n");int a = 0, b = 0;scanf("%d %d", &a, &b);printf("得到的结果是%d\n", p[input](a, b));}} while (input);if (input == 0) {printf("您已退出");}
}

注意函数指针的使用:int (*p[5]) (int a,int b),可以实现存放多个函数指针

b8d92b1152694c94bc26def2aa67ce07.png

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 安科瑞ACR10R网络电力仪表 CE认证 带外置互感器
  • ESP32-IDF http请求崩溃问题分析与解决
  • Ubuntu22.04安装 docker和docker-compose环境
  • c# fromlayout 布局中间空隙问题
  • 无人机培训机构必备运营合格证及驾驶员训练机构合格证详解
  • 告别AI痕迹:如何让Midjourney创作更自然
  • 2024百元蓝牙耳机推荐有哪些?四款百元王炸机型2024推荐
  • 如何理解 Linux 命令 和 Shell 命令 之间的关系
  • Spring Security 原理、源码解析及进阶
  • 如何使用 Qt C++ 基于 FFmpeg 开发本地视频播放器
  • Docker 系列文章导航
  • AI大模型编写多线程并发框架(六十五):发布和应用
  • C++和OpenGL实现3D游戏编程【连载7】——文字和汉字的显示
  • 使用C++编写接口调用PyTorch模型,并生成DLL供.NET使用
  • k8s ingress-nginx
  • hexo+github搭建个人博客
  • centos安装java运行环境jdk+tomcat
  • co模块的前端实现
  • Effective Java 笔记(一)
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • spring + angular 实现导出excel
  • Terraform入门 - 1. 安装Terraform
  • vue自定义指令实现v-tap插件
  • 程序员该如何有效的找工作?
  • 翻译--Thinking in React
  • 微信公众号开发小记——5.python微信红包
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • raise 与 raise ... from 的区别
  • 第二十章:异步和文件I/O.(二十三)
  • 积累各种好的链接
  • ​MySQL主从复制一致性检测
  • ​学习一下,什么是预包装食品?​
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (1) caustics\
  • (3) cmake编译多个cpp文件
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (C语言)逆序输出字符串
  • (备忘)Java Map 遍历
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • *算法训练(leetcode)第四十天 | 647. 回文子串、516. 最长回文子序列
  • .form文件_一篇文章学会文件上传
  • .Net Core中的内存缓存实现——Redis及MemoryCache(2个可选)方案的实现
  • .NET开源、简单、实用的数据库文档生成工具
  • .ui文件相关
  • @JsonFormat与@DateTimeFormat注解的使用
  • @RequestMapping 和 @GetMapping等子注解的区别及其用法
  • @SpringBootApplication 包含的三个注解及其含义
  • [ JavaScript ] JSON方法
  • [001-03-007].第07节:Redis中的事务
  • [ajaxupload] - 上传文件同时附件参数值