要理解转移表,先要了解函数指针数组。
函数指针数组的说明:函数指针数组
先看代码:
void print_menu()
{
printf("********************************************\n");
printf("***** 1.add 2.sub *****\n");
printf("***** 3.mul 4.div *****\n");
printf("***** 5.clean records 0.exit *****\n");
printf("********************************************\n");
}
int myadd(int num1, int num2)
{
return num1 + num2;
}
int mysub(int num1, int num2)
{
return num1 - num2;
}
int mymul(int num1, int num2)
{
return num1 * num2;
}
int mydiv(int num1, int num2)
{
if (num2 == 0)
{
printf("The divisor cannot be 0! \n\n");
return -1;
}
return num1 / num2;
}
int main()
{
int opt_num = 0;
int num1 = 0;
int num2 = 0;
int res = 0;
int(*funp[5])(int, int) = { NULL ,myadd, mysub, mymul, mydiv, };
flag:
print_menu();
while (1)
{
printf(">>Choose operation : \n");
scanf("%d", &opt_num);
if ((opt_num >= 0) && (opt_num < 6))
{
if (opt_num == 0)
exit(1);
if (opt_num == 5)
{
system("cls");
goto flag;
}
printf(">>please enter two operation num : \n");
scanf("%d %d", &num1, &num2);
res = funp[opt_num](num1, num2);
if (num2 != 0)
printf(">>The reslut is : %d\n\n", res);
}
else
{
printf("Please enter 0~5 !\n");
}
}
system("pause");
return 0;
}
运行结果:
这是一个使用转移表实现了一个简单的整型数据计算器,计算器有加减乘除运算,清空记录,退出等功能。
在调用加减乘除函数时,用函数指针数组实现调用,具体怎么做呢?我们先定义一个类型相匹配的函数指针数组,然后 将函数的地址 赋给 函数指针数组中 类型与函数相匹配的 元素(元素类型为函数指针) 。于是我们就可以依靠此数组的下标来调用不同函数。