函数指针数组,首先是一个数组,其次其中存储的数据类型是函数指针,所以我们可以通过使用函数指针数组来调用不同的函数。
接下来为大家展示他的基本使用方法(模拟计算器)
函数指针数组结构
int (*arr[])(int x, int y) = {NULL, Add,Sub,Mul,Div };
其中NULL, Add,Sub,Mul,Div,分别是四个函数的函数名,我们可以通过函数名调用函数,但是需要注意的是NULL是一个空指针不能直接调用,而添加他的目的是因为我们的菜单,和最外层的do while循环当输入的数为0是则退出循环,所以写了一个空指针用来占位,此时Add对应的下标为1,其他亦是如此符合我们的菜单。
int x,int y 则是需要计算和传入的两个整形的数据用来计算加减乘除。
*arr[] 则是指针数组其中arr为数组名,
函数指针数组类型
int (*[])(int x, int y) = {NULL, Add,Sub,Mul,Div };
我们可以看到函数指针数组的类型就是去掉函数名arr
函数指针数组模拟计算器
实现思路
我们首先定义四个函数用来计算加减乘除,然后分别将这四个函数的函数指针传入arr函数指针数组中通过下标来调用。输入1则调用Add函数以此类推。
最外层用了do while 循环来实现菜单的展示以及if判断通过输入的结果判断是否进行计算还是退出,亦或是输入错误如果输入0则退出。(如果不了解do while循环可以参考主页C语言分支循环)
代码展示
#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 2. Sub *******\n");
printf("******** 3. Mul 4. Div *******\n");
printf("******** 0. exit *******\n");
printf("*****************************************\n");
}
int main()
{
int input = 0;
int x = 0;
int y = 0;
int ret = 0;
//定义函数指针数组用来存储四种算法
int (*arr[])(int x, int y) = {NULL, Add,Sub,Mul,Div };
do
{
menu();
printf("请选择-->");
scanf("%d", &input);
if (input >= 1 && input <= 4)
{
printf("请输入两个操作数:");
scanf("%d %d", &x, &y);
ret = arr[input](x, y);
printf("计算结果为:%d\n", ret);
}
else if (input == 0)
{
system("cls");
break;
}
else
{
system("cls");
printf("输入错误请重新输入\n");
}
} while (input);
return 0;
}
标签:arr,int,转移,Add,数组,函数指针,Div
From: https://blog.csdn.net/weixin_74837455/article/details/136763803