前言
今天学习了c语言中的函数指针部分,想与大家分享一下利用c语言中的函数指针实现整数四则运算的转移表的代码编写。
代码展示
#include<stdio.h>
int Add(int x, int y)//定义各个函数
{
return x + y;
}
int Min(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;
}
int main()
{
int x, y, z = 1;;
int (*arr[5])(int, int) = { 0,&Add,&Min,&Mul,&Div };//创建函数指针数组
while (z)
{
printf("请输入数字操作:1~加法;2~减法;3~乘法;4~整除;0~退出\n");
scanf("%d", &z);
if (z == 0)//判断是否退出
break;
printf("输入两个操作数:");
scanf("%d %d", &x, &y);
int ret = arr[z](x, y);//调用函数指针数组
printf("%d\n", ret);
}
return 0;
}
原理分析
函数功能
- Add 函数:接受两个整数参数 x 和 y ,返回它们的和,实现了简单的加法运算。
- Min 函数:接受两个整数参数 x 和 y ,返回 x 减去 y 的结果,完成减法操作。
- Mul 函数:以两个整数 x 和 y 为参数,返回它们的乘积,执行乘法运算。
- Div 函数:接收两个整数 x 和 y ,返回 x 除以 y 的商(这里是整除,会舍去小数部分),实现除法操作。
主函数部分
- 变量定义:
- 定义了三个整数变量 x 、 y 和 z ,其中 z 初始化为 1 。 x 和 y 用于存储用户输入的操作数, z 用于控制循环和选择操作类型。
- 函数指针数组定义:
- int (*arr[5])(int, int) 定义了一个函数指针数组 arr ,它可以存储指向返回值为整数且接受两个整数参数的函数的指针。数组大小为 5 ,并初始化为 { 0,&Add,&Min,&Mul,&Div } ,这里将 Add 、 Min 、 Mul 、 Div 这四个函数的地址依次存入数组(索引从 1 开始对应相应操作,索引 0 初始化为 0 ,便于后续对while循环的调整)。
- 循环操作:
- 通过 while (z) 循环来不断接收用户的操作选择,直到 z 为 0 时退出循环。
- 在循环内,首先提示用户输入数字操作( 1 到 4 对应四种算术运算, 0 表示退出),并通过 scanf 读取用户输入的值到 z 中。如果 z 为 0 ,则直接跳出循环结束程序。
- 接着提示用户输入两个操作数,并通过 scanf 读取到 x 和 y 中。
- 然后通过 int ret = arr[z](x, y); 调用对应的函数(根据用户输入的 z 值找到数组中对应的函数指针并执行函数),并将返回结果存储在 ret 中。
- 最后通过 printf("%d\n", ret); 输出操作结果。
小结
本人是c萌新一枚,代码如有错误或者是什么值得改进的地方,欢迎大家在评论区或者私信中指出,如果本文对您有帮助的话,还希望点点点赞与收藏,谢谢大家。