设计一个简易计数器:
选择1.加法(add),2.减法(sub),3.乘法(mul),4.除法(div)。
int(*p[5])(int x, int y) = { 0, add, sub, mul, div };//转移表:转换表就是一个函数指针数组,创建一个转换表需要两个步骤,首先,声明并初始化一个函数指针数组,唯一需要留心之处就是确保这些函数的原型出现在这个数组的声明之前;一看转移这几个字儿,就想到和状态相关,我们在实际应用中使用if-else结构或者switch语句进行一些状态的切换。
(p[input])(x, y)//实现 + - * /几个符号。
利用转移表,函数指针数组是进行不同运算的代码简化。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
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 x, y;
int input = 1;
int ret = 0;
int(*p[5])(int x, int y) = { 0, add, sub, mul, div };//转移表
while (input)
{
printf("************************\n");
printf(" 1.add 2.sub \n");
printf(" 3.mul 4.div \n");
printf("************************\n");
printf("请选择:");
scanf("%d", &input);
if ((input <= 4) && (input >= 1))
{
printf("请输入操作数:");
scanf("%d %d", &x, &y);
ret = (*p[input])(x, y);
}
else
printf("输入有误\n");
printf("ret = %d\n", ret);
}
system("pause");
return 0;
}
运行结果: