c语言中非常方便的函数指针数组!!附简易加减乘除计算器


在这里插入图片描述
前言

提示:本文继续上一期的函数指针进行函数指针数组的讲解,学习前一定一定要先预习一下函数指针!本文的函数指针数组学习意在帮助大家建立一个简洁有效的函数使用体系,相信聪明的你学习完本文一定有收获!!!。


提示:以下是本篇文章正文内容,下面案例可供参考

一、引子

示例:以下这个代码,我们可以很清楚的看出,arr是一个整形指针数组,数组里的每个元素均为整形指针

int *arr[10];

那我们就会有接下来的两个问题:
整形指针能放入到一个数组内,那么参数、返回类型相同的函数指针能否也可以放入一个数组内如果可以,我们应该如何创建那个数组呢?

二、使用步骤

1.创建函数指针数组

先上代码(示例):

#include<stdio.h>
int Add(int x, int y)
{
	return x + y;
}
int Sub(int x, int y)
{
	return x - y;
}
int main()
{
	int(*p1)(int, int) = Add;//Add和Sub的函数指针类型为int(*)(int,int)
	int(*p2)(int, int) = Sub;
	int(*parr[2])(int,int)={Add,Sub};
}

由以上代码,我们不难看出,函数Add和函数Sub除了名字和功能不同,它们的参数和返回类型均相同,我们可以写出它们共同的函数指针类型(详情见上一期的C语言快速入门):int(*)(int,int) ,也就是说,只要我们由Add和Sub两个函数的地址,我们都可以放到int( * )(int,int)这个类型中去

那么Add和Sub这两个函数指针数组类型怎么创建?我们举两个简单的例子:

int a;//将变量名a删去就是类型 int也就是整形
int arr[10];//将变量名arr删去就是类型 int [10]也就是整形数组

整形和整形数组类型的差别也就是多了一个[ ]这样的东西

这里找函数指针数组类型的创建法也是同样的道理,我们仍以Add函数为例,已知了Add函数指针类型为int( * )(int,int),我们在 * 后跟一个[ ]即可 也就是如下代码,初始化和别的数组初始化没有什么区别,我们正常把函数Add和Sub放入(函数名==&函数名,详情见上一期函数指针)

int(*parr[2])(int,int)={Add,Sub};//这里初始化放入的是函数的地址
//parr就是一个函数指针数组

2.函数指针数组的实际使用案例

比如我们这里写一个加减乘除的简易计算器
代码如下(示例):
Add Sub Mul Div分别代表加减乘除

#include<stdio.h>
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  ***\n");
	printf("***2.Sub  ***\n");
	printf("***3.Mul  ***\n");
	printf("***4.Div  ***\n");
	printf("***0.exit ***\n");
}
int main()
{
	int input = 0;
	do
	{
		int x = 0;
		int y = 0;
		int z = 0;
		menu();
		printf("请选择:");
		scanf("%d", &input);
		int(*parr[5])(int, int) = { 0,Add,Sub,Mul,Div };
		//这里为什么要加0,是为了让数组中Add到Div下标分别是1到4,对应计算器菜单中的选项
		if (input == 0)
		{
			printf("退出计算器\n");
		}
		else if (input >= 1 && input <= 4)
		{
			printf("请输入2个操作数\n");
			scanf("%d %d", &x, &y);
			z=parr[input](x,y);//parr是存放函数指针的数组,有了下标也就有了某个函数指针(也就是函数地址)
			//我们在函数指针那一块讲解过:调用函数的时候可以直接用函数地址调用(详情见上一期C语言快速入门)
			printf("计算结果为%d\n", z);
		}
		else
		{
			printf("输入错误,请重新输入\n");
		}
	} while (input);
	return 0;
}

该段代码有以下一些注意点
1.在写函数指针数组时,因为下标的缘故,菜单中的选项和实际存放的函数指针是不匹配的,我们可以在Add前加一个0(该0本身是无意义的)将下标依次加1个

2.parr是存放函数指针的数组,有了下标也就有了某个函数指针(也就是函数地址)我们在函数指针那一块讲解过:&Add=Add,调用函数的时候可以直接用函数地址调用(详情见上一期C语言快速入门)

这里用函数指针数组写的好处是什么?
在日常的工作中,我们如果要写一个需要用到很多函数的程序,而这个程序将来也极其有可能增加新的或删减旧的函数。传统的更改方式,一旦不小心,可能会损伤到其他正常的代码,导致满盘皆输。如果用函数指针数组,我们只需要对函数指针数组大小变换一下,再将新的或旧的在函数指针数组初始化中修改一下即可,而在函数调用方面也不需进行更改,非常非常非常的方便。


总结

提示:本文的函数指针数组学习重点为函数指针数组的创建与使用,在具体实践中,要学会通过函数指针数组调用各个函数。学习完本文,相信屏幕前的你在将来的关于函数工作或学习也将更加得心应手,预祝学习愉快。
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
这是一个C程序,可以实现加减乘除计算器功能。程序首先接受两个数作为输入,然后根据用户输入的操作符进行相应的运算,最后输出结果。具体的实现步骤如下: 1. 引用的代码首先包含了两个头文件,iostream用于输入输出流,cstring用于字符串操作。接下来使用了using namespace std来引入标准命名空间。 2. 在主函数main(),定义了整型变量a和b用于存储用户输入的两个数。 3. 进入while循环,循环条件为1,即永远为真,使得程序可以一直进行计算。 4. 接下来定义了整型变量f1和f2,用于存储操作数和结果。 5. 定义了字符数组a,用于存储用户输入的操作符。 6. 使用cin输入流依次读取f1和a。 7. 使用strlen函数获取字符数组a的长度。 8. 定义了指针p指向字符数组a的首地址。 9. 使用for循环遍历字符数组a,从索引1开始,将字符转换为整型数字,并计算f2的值。 10. 利用switch语句根据操作符进行相应的运算,将结果存储在ans变量。 11. 使用delete释放动态分配的内存,避免内存泄漏。 12. 使用cout输出结果ans。 13. 循环回到while开始的地方,继续接受输入并进行计算。 这段代码实现了一个简单C语言加减乘除计算器。用户可以输入两个数和一个操作符,然后程序会根据操作符进行相应的运算并输出结果。<span class="em">1</span><span class="em">2</span>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

劲夫学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值