函数指针的应用(一)计算器

C语言函数指针详解 C语言函数指针 一、什么是函数指针 1.理解函数指针 ​ 函数指针,首先根据他的名称我们就大概可以了解到他是一个指针,是什么样的指针呢?是和函数有关的一种特殊的指针。 ​ 我们知道 int*p 是指向int型变量的指针,char*p是指向char型变量的指针,那么不难理解,函数指针就是一个指向函数的指针。 int arr[10]={0}; int *p = arr; ​ 我们知道,在数组中数组名就是首元素的地址。 ​ 那么试着猜猜看,函数的地址是什么样的情况呢。 ​ 我们不妨打印一下看看结果是什 阅读详情

计算器基本功能:+ , - , * , /

下面分别用常规写法 和 函数指针写法完成计算器的模拟实现:
1.常规写法
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(">>>>>>>>>>>        计算器          <<<<<<<<<<<<\n");
    printf(">>>>>>>>>>>   1.add       2.sub     <<<<<<<<<<<<\n");
    printf(">>>>>>>>>>>   3.mul       4.div     <<<<<<<<<<<<\n");
    printf(">>>>>>>>>>>         0.exit          <<<<<<<<<<<<\n");
    printf(">>>>>>>>>>>.........................<<<<<<<<<<<<\n");

}

int main()
{
    int input = 0;
    int a = 0;
    int b = 0;
    int ret = 0;
    do
    {
        menu();
        printf("请选择:\n");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            printf("请输入两个操作数:");
            scanf("%d%d", &a, &b);
            ret = Add(a, b);    
            printf("ret = %d\n", ret);
            break;
        case 2:
            printf("请输入两个操作数:");
            scanf("%d%d", &a, &b);
            ret = Sub(a, b);
            printf("ret = %d\n", ret);
            break;
        case 3:
            printf("请输入两个操作数:");
            scanf("%d%d", &a, &b);
            ret = Mul(a, b);
            printf("ret = %d\n", ret);
            break;
        case 4:
            printf("请输入两个操作数:");
            scanf("%d%d", &a, &b);
            ret = Div(a, b);
            printf("ret = %d\n", ret);
            break;
        case 0:
           printf("退出程序\n");
            break;
        default:
            printf("选择错误\n");
            break;
        }

    } while(input);

    system("pause");
    return 0;

}

结果:
这里写图片描述
弊端:代码冗余,所占篇幅大,维护起来繁琐; 后期添加功能(比如求 一个数的次方)操作不方便。

2.使用函数指针

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(">>>>>>>>>>>        计算器          <<<<<<<<<<<<\n");
    printf(">>>>>>>>>>>   1.add       2.sub     <<<<<<<<<<<<\n");
    printf(">>>>>>>>>>>   3.mul       4.div     <<<<<<<<<<<<\n");
    printf(">>>>>>>>>>>         0.exit          <<<<<<<<<<<<\n");
    printf(">>>>>>>>>>>.........................<<<<<<<<<<<<\n");

}

int main()
{
    int input = 0;
    int a = 0;
    int b = 0;
    int ret = 0;
    //转移表
    int(*pfun[5])(int, int) = { 0, Add, Sub, Mul, Div};  //  函数指针数组  函数名作为地址存放在数组中

    do
    {
        menu();
        printf("请选择:\n");
        scanf("%d", &input);
        if (input == 0)    
        {
            printf("退出程序\n");
        }
            break;
        else if (input > 4)   
            printf("选择错误\n");
        else
        {
            printf("请输入两个操作数:");
            scanf("%d%d", &a, &b);
            ret = pfun[input](a, b);  // pfun[input] 是对函数指针数组的元素(元素全是函数的地址)解引用,取出对应函数,
                                    //等价于 *(pfun(input)) ,比如输入3,会拿到 Mul的地址,再传入参数 则可以该调用函数。
            printf("%d\n", ret);
        }
    } while (input);  // 当选择0时停止,否则一直循环

    system("pause");
    return 0;

}

结果:
这里写图片描述

相比之下,使用函数指针写同样能达到相同的目的,但是函数指针大大减少了代码量,后期如果想添加新的计算功能时,只要在函数指针数组 中加入相应的函数即可。

可以编辑自己需要的计算公式的计算器 能够提高工作效率的计算器,可以编辑自己需要的公式的计算器 立即下载

相关推荐

folium离线地图实战:从下载到部署的完整指南

本文提供了一份完整的folium离线地图实战指南。针对网络不稳定或内网环境下的地图应用需求,详细讲解了如何下载离线地图瓦片数据,并通过两种核心方法(直接替换URL与创建TileLayer)将其集成到folium中。文章还涵盖了部署优化、边界处理及资源本地化等关键步骤,帮助你构建完全脱离网络依赖的交互式地图应用。

weixin_29061041的博客 274

C语言学习:函数指针与指针运算

C语言学习函数指针与指针运算。

qq_34606099的博客 607

设计数据库 ER 图太麻烦?不妨试试这两款工具,自动生成数据库 ER 图!!!

告别手动画图,提高效率~

楼下小黑哥 2万+

指针部分实现计算器

使用C语言进行转移表和回调函数的学习与实践。

2301_81200576的博客 2140

招财牛猫|股社区|猫笔刀公众号历史文章13-21年(含评论),投资内容 收藏学习

招财大牛猫|股社区|猫笔刀公主号历史文章13-21年(含评论)

ZhaoCaiDaNiuMao的博客 7229

SAP 公司间库存调拨通过IDOC完成自动发票校验

本文仅用于SAP软件的应用与学习,不代表SAP公司。(注:文中所示截图来源SAP ERP软件,软件相应著作权归SAP所有。公司间采购时,通过SAP内部EDI 数据传输功能, 由销售方开的公司间发票自动触发采购方的发票校验。​欢迎扫码加如下微信,我会把大家拉到SAP PP学习群,随时欢迎跟我和其他SAP PP顾问一起交流和学习,如下图库存调拨订单,系统已经完成了发货方发货和收货方收货。

2402_84262664的博客 923

C语言:函数指针数组和计算器(加减乘除)的实现

C语言:函数指针数组和计算器(加减乘除)的实现

weixin_63318044的博客 3619

Gamit10.71添加新的天线类型

添加新的天线类型需要涉及到四个文件:antmod.dat,rcvant.dat,guess_rcvant.dat,hi.dat。 注意:格式要一致!!! 举例说明,我要添加一个JCA229的天线(带JCAD天线罩),对应接收机使用的是南方的South Net-S9。

Penny的博客 2710

函数指针实战:打造灵活的计算器程序

本文通过计算器程序示例演示了C语言函数指针的应用。首先展示了传统实现方式中代码重复的问题,然后引入函数指针解决方案:定义统一计算函数calc(),通过传入不同的运算函数指针(add/sub/mul/div)实现多态调用。这种设计显著提高了代码复用性,解耦了运算逻辑与调用接口,便于功能扩展。函数指针作为C语言实现多态的核心技术,不仅能优化代码结构,还为理解高级编程范式奠定了基础。

kuangkuangze的博客 84

S7-200SMART 中如何实现单按钮启停功能(两种方法)?

S7-200SMART 中如何实现单按钮启停功能(两种方法),Toggle库指令,状态翻转

Robot_PLC_HMI_Automation 1万+

腾讯Android开发面试准备指南及参考答案

腾讯元宝高级Android开发职位面试准备指南 该职位要求扎实的Kotlin基础、架构设计能力和性能优化经验,重点关注Android客户端开发。面试流程约3轮,支持线上面试,流程较快。候选人需准备以下核心内容: 基础技术:Kotlin特性、Android开发生命周期、多线程编程 架构设计:MVVM/MVI模式应用、组件化解耦方案 性能优化:流畅度提升、内存管理、启动时间优化等实战案例 加分技能:Jetpack Compose开发、音视频处理、跨平台开发经验 建议结合项目经验准备具体案例,突出技术深度和问题解

郑伟强dev的专栏 1192

C语言-使用函数指针 和 函数指针数组实现 计算器功能

在这里,calc函数的参数是一个函数指针,返回类型是int,函数参数则是int,int,用于接受我们的计算函数,把函数的地址直接传入calc,使用calc的接受值来进行计算,可以减少冗杂重复的代码编写,实现程序的简洁化m3bro。在学习了指针进阶后,对各种指针如(数组指针、指针数组、函数指针等)有了更深刻的理解和印象,有了函数指针,对于我们在工程中的应用来说,可以帮我们省去冗杂的代码,提高代码的可阅读性,下面我们来看看是如何利用函数指针实现这个小计算机。重点说一下calc函数,使用到了函数指针。

weixin_62585968的博客 449

【数据集】30 m地表温度LST数据集

【数据集】30 m地表温度LST数据集

WW、forever的博客 1126

函数指针应用一——模拟计算器

上一篇简单介绍了函数指针,这篇将利用函数指针实现一个简单的计算器。

weixin_45102403的博客 251

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

转移表(函数指针数组)和回调函数(通过函数指针调用的函数)

上一篇文章简单介绍了函数指针和函数指针数组,本篇文章是介绍他们的用途。函数指针数组的用途-----转移表:通过转移表来实现一个简单的计算器代码如下:#define _CRT_SECURE_NO_WARNINGS 0 #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; int Add(int x, int y) { return x + y;//加 ...

zimituanzi_的博客 475

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

指针 --- 四

指针---四

xxhh156的博客 1182

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C语言-指针终阶

本文介绍了C语言中指针的高级应用,包括数组指针、函数指针及其实际应用。主要内容:1)数组指针的定义与使用,展示如何通过数组指针访问二维数组;2)函数指针的概念,演示如何声明和使用函数指针调用函数;3)函数指针的实际应用案例,实现了一个基于函数指针的计算器程序;4)更复杂的指针类型,包括函数指针数组和指向函数指针数组的指针。通过这些示例,展示了指针在C语言中的强大功能和灵活性,特别是在处理数组和函数时的应用优势。

m0_53123717的博客 236

详细讲解C语言15(C语言系列)

指针真的很难吗?快进来和我一起学习指针吧!

weixin_61599986的博客 737

指针的进阶

指针进阶: 字符指针、数组指针、 指针数组、数组传参和指针传参、 函数指针、函数指针数组、指向函数指针数组的指针、 回调函数(sqort函数)

m0_64388758的博客 499

C语言:指针进阶

/&arr - 取出整个数组的地址。//arr - 取出元素的地址 - arr[0]的地址。1:sizeof(数组名)- 数组名表示整个数组,计算这个数组的大小,单位是字节。arr与&arr指向位置皆为数组首元素地址,但是他们的类型是不一样的!2:&数组名 - 数组名表示整个数组,取出的是整个数组的地址。parr就是一个数组指针,存放了arr整型数组的地址。//二级字符指针的数组。double也是一个数组指针,存放了d指针数组的地址。//一级字符指针的数组。数组名是数组首元素的地址。

2301_77032710的博客 154

map实现c++中的反射(粗略)

看了c#中的反射机制,感觉这个真的好方便啊,然后也想在c++里面实现一个这样的功能,于是在网上看到别人的方法,就是用map来存放类名(字符串)和函数指针,在使用的时候直接用这个字符串来找这个函数指针,执行这个函数。   俗话说,心动不如行动,于是我便将之前简单工厂模式的那个例子拿过来修改,将原来的switch判断符号来实例化算法类更改,使用map将‘+’、‘-’、‘*’、‘/’与具体的算法生产函

hjf161105的博客 903

指针数组以及利用函数指针来实现简易计算器及typedef关键字(指针终篇)

基于阿辉前两篇博客指针的基础篇和进阶篇对于指针的了解,那么今天阿辉将为大家介绍C语言的指针剩下的部分,包括指针数组以及利用函数指针来实现简易计算器及typedef关键字,关注阿辉不迷路哦 😘 ,内容干货满满😋,接下来就跟着阿辉一起学习吧👊。

m0_75108739的博客 2101

指针数组,数组指针,函数指针及应用(回调函数)

指针数组与数组指针   当我们在学习指针与数组时总会遇到两个令人容易混淆的概念:数组指针与指针数组。   在这里数组指针是指向数组的指针,其本质为指针指向的对象是数组。由于数组的形式多样所以数组指针的表达也十分多样。   同理,指针数组就是存放指针的数组,其本质为数组。   由于“[ ]”的优先级高于“ * ”的优先级,指针数组与数组指针的表达可做如下表示: int p1 [10];...

Erica_ou的博客 1万+

利用函数指针数组写计算器

小编这些年深知大多数初中级工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!如果你需要这些资料,⬅专栏获取入\n");return 0;

2401_86086854的博客 737

C语言函数指针详解及典型应用例程

提供函数指针定义及常用使用方法,并列出多个例程进行详细说明,加深对函数指针的理解及应用。

weixin_42306872的博客 3257

C语言——函数指针——函数指针数组 (详解)

函数指针是指向函数的指针变量,可以用来调用相应的函数。函数指针数组的作用是可以根据需要动态地选择并调用不同的函数。其中,返回值类型是函数的返回值类型,指针数组名是函数指针数组的名称,数组大小是指针数组中元素的个数,参数列表是函数的参数类型和个数。函数指针是指向函数的指针变量,可以用来调用相应的函数。总之,函数指针数组提供了一种灵活的方式来选择并调用不同的函数,可以根据具体需求动态地改变函数的行为。使用函数指针数组时,可以通过索引来访问数组中的元素,并通过函数指针调用相应的函数。

Jason_from_China的博客 6190
上一篇: 深度解析可变参数列表
下一篇: 函数指针的应用(二)模仿qsort的功能实现通用的冒泡排序
Name_seven
博客等级 码龄9年 12粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值