转移表

要理解转移表,先要了解函数指针数组。
函数指针数组的说明:函数指针数组
先看代码:

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;
}

运行结果:
这里写图片描述
这里写图片描述

这是一个使用转移表实现了一个简单的整型数据计算器,计算器有加减乘除运算,清空记录,退出等功能。
在调用加减乘除函数时,用函数指针数组实现调用,具体怎么做呢?我们先定义一个类型相匹配的函数指针数组,然后 将函数的地址 赋给 函数指针数组中 类型与函数相匹配的 元素(元素类型为函数指针) 。于是我们就可以依靠此数组的下标来调用不同函数。

猜你喜欢

转载自blog.csdn.net/qq_36391130/article/details/78699621