轉移表

要理解轉移表,先要了解函數指針數組。
函數指針數組的說明:函數指針數組
先看代碼:

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

運行結果:
這裏寫圖片描述
這裏寫圖片描述

這是一個使用轉移表實現了一個簡單的整型數據計算器,計算器有加減乘除運算,清空記錄,退出等功能。
在調用加減乘除函數時,用函數指針數組實現調用,具體怎麼做呢?我們先定義一個類型相匹配的函數指針數組,然後 將函數的地址 賦給 函數指針數組中 類型與函數相匹配的 元素(元素類型爲函數指針) 。於是我們就可以依靠此數組的下標來調用不同函數。

發佈了41 篇原創文章 · 獲贊 37 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章