转移表

来源:互联网 发布:外汇行情数据接口 编辑:程序博客网 时间:2024/05/16 10:18

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

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

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

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