欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言函數(shù)指針數(shù)組實(shí)現(xiàn)計算器功能

 更新時間:2022年04月12日 10:47:44   作者:scut-ALong  
這篇文章主要通過C語言函數(shù)指針數(shù)組實(shí)現(xiàn)了計算器的功能,是一個很好而且流程詳細(xì)的小例子,感興趣的新手朋友們可以自己動手也寫一遍

一、概念        

數(shù)組:一個存放相同類型數(shù)據(jù)的存儲空間。

int arr[10];
//數(shù)組arr的每個元素是int

指針數(shù)組:一個存放指針的數(shù)組。

int* arr[10];
//數(shù)組arr的每個元素是int*

函數(shù)指針:一個指向函數(shù)的指針,一般用函數(shù)名表示。

int Add(int x, int y)
{
    return x + y;
}
 
int main()
{
    int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int (*p)[10] = &arr; 
    //取出數(shù)組的地址,p就是指向數(shù)組arr的指針,數(shù)組中每個元素類型是int,p就是數(shù)組指針
    
    //引出函數(shù)指針的問題
    int (*pf)(int, int) = &Add;
    //是一個指向函數(shù)的指針 - 存放函數(shù)的地址

需要注意的是,函數(shù)名是函數(shù)的地址,&函數(shù)名還是函數(shù)的地址,在visual stdio編譯環(huán)境下能打印出同一地址。這里的函數(shù)指針pf是指向函數(shù)Add,其中(int, int)表示函數(shù)需要的兩個形參類型是int,函數(shù)返回值類型是int。        

函數(shù)指針數(shù)組:一個存放指針的數(shù)組,其中的指針都指向各自的函數(shù)。

//函數(shù)指針
int (*p)(int, int) = Add;
int (*p)(int, int) = Sub; 
//Add和Sub是函數(shù)名,需要傳入的兩個形參和返回值類型都是int
 
//將上面兩個同類型的函數(shù)指針放入數(shù)組中,得到函數(shù)指針數(shù)組
int (* arr[2]) (int, int) = {Add, Sub};

二、用途

函數(shù)指針數(shù)組的用途:轉(zhuǎn)移表

三、案例:計算器      

(1)基礎(chǔ)代碼編譯:

#include <stdio.h>
//實(shí)現(xiàn)加減乘除
int add(int a, int b)
{
    return a + b;
}
int sub(int a, int b)
{
    return a - b;
}
int sub(int a, int b)
{
    return a * b;
}
int sub(int a, int b)
{
    return a / b;
}
int main()
{
    int x, y;
    int input = 1;
    int ret = 0;
    do
    {
        printf( "***************************\n" );
        printf( "    1:add         2:sub    \n" );
        printf( "    3:mul         4:div    \n" );
        printf( "***************************\n" );
        printf("請選擇:");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
                printf("輸入操作數(shù): ");
                scanf("%d %d", &x, &y);
                ret = add(x, y);
                printf("ret = %d\n", ret);
                break;
        case 2:
                printf("輸入操作數(shù): ");
                scanf("%d %d", &x, &y);
                ret = sub(x, y);
                printf("ret = %d\n", ret);
                break;
        case 3:
                printf("輸入操作數(shù): ");
                scanf("%d %d", &x, &y);
                ret = mul(x, y);
                printf("ret = %d\n", ret);
                break;
        case 4:
                printf("輸入操作數(shù): ");
                scanf("%d %d", &x, &y);
                ret = div(x, y);
                printf("ret = %d\n", ret);
                break;
        case 0:
                printf("退出程序\n");
                break;
        default:
                printf("退出程序\n");
                break;
        }
    } while (input);
 
    return 0;
} 

這里用到的switch循環(huán)語句,實(shí)現(xiàn)了數(shù)據(jù)的輸入、輸出和函數(shù)調(diào)用,結(jié)構(gòu)與功能簡單易懂,但主函數(shù)中代碼太過冗長,重復(fù)的代碼很多,這樣的結(jié)構(gòu)導(dǎo)致后期拓展函數(shù)功能需改動的地方非常多。

(2)使用函數(shù)指針數(shù)組的實(shí)現(xiàn):

#include <stdio.h>
//實(shí)現(xiàn)加減乘除
int add(int a, int b)
{
    return a + b;
}
int sub(int a, int b)
{
    return a - b;
}
int sub(int a, int b)
{
    return a * b;
}
int sub(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 };//轉(zhuǎn)移表
    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("輸入操作數(shù): ");
            scanf("%d %d", &x, &y);
            ret = (*p[input])(x, y);
        }
        else
        {
            printf( "輸入有誤\n" );
            printf( "ret = %d\n", ret );
        }
        return 0;
}
       

敲重點(diǎn)?。?!     敲重點(diǎn)?。?!  敲重點(diǎn)!?。?/p>

這里我們看到函數(shù)指針數(shù)組的用法是:數(shù)組內(nèi)容(函數(shù)指針)解引用得到函數(shù)地址,接著傳入?yún)?shù),進(jìn)行函數(shù)調(diào)用,結(jié)果返回一個整形(int)數(shù)據(jù)由ret接收。

ret = (*p[input])(x, y);

在代碼中若出現(xiàn)許多函數(shù)同返回值類型,同參數(shù)類型時,使用函數(shù)指針數(shù)組是一個能大大簡化代碼,消除重復(fù)代碼,是結(jié)構(gòu)更加輕易易懂,為后期拓展更多功能函數(shù)提供便利。

到此這篇關(guān)于C語言函數(shù)指針數(shù)組實(shí)現(xiàn)計算器功能的文章就介紹到這了,更多相關(guān)C語言 計算器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++如何實(shí)現(xiàn)定長內(nèi)存池詳解

    C++如何實(shí)現(xiàn)定長內(nèi)存池詳解

    內(nèi)存池根據(jù)存儲的元素的長度是否可變,分為變長,與定長兩種內(nèi)存池,這篇文章主要給大家介紹了關(guān)于C++如何實(shí)現(xiàn)定長內(nèi)存池的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • C++實(shí)現(xiàn)簡單的學(xué)生成績管理系統(tǒng)

    C++實(shí)現(xiàn)簡單的學(xué)生成績管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡單的學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言 一級指針與二級指針詳細(xì)介紹

    C語言 一級指針與二級指針詳細(xì)介紹

    這篇文章主要介紹了C語言 一級指針與二級指針詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • C++循環(huán)隊列實(shí)現(xiàn)模型

    C++循環(huán)隊列實(shí)現(xiàn)模型

    這篇文章主要介紹了C++循環(huán)隊列實(shí)現(xiàn)模型,較為詳細(xì)的分析了循環(huán)隊列算法的原理與實(shí)現(xiàn)方法,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-12-12
  • C++構(gòu)造函數(shù)深度學(xué)習(xí)

    C++構(gòu)造函數(shù)深度學(xué)習(xí)

    這篇文章主要為大家詳細(xì)介紹了C++構(gòu)造函數(shù),深度學(xué)習(xí)C++構(gòu)造函數(shù),感興趣的小伙伴們可以參考一下
    2016-08-08
  • C++嵌入式內(nèi)存管理詳情

    C++嵌入式內(nèi)存管理詳情

    這篇文章主要介紹了C++嵌入式內(nèi)存管理,是對上一篇內(nèi)存的一個補(bǔ)充,主要講解Linux中的內(nèi)存;這部分對于一些端側(cè)部署的伙伴來說比較重要,推薦針對不同的板子,下面來看看詳細(xì)內(nèi)容吧,需要的朋友可以參考一下
    2021-12-12
  • C++文件輸入輸出fstream使用方法

    C++文件輸入輸出fstream使用方法

    C++標(biāo)準(zhǔn)庫提供了<fstream>頭文件,其中包含了用于文件輸入輸出的相關(guān)類和函數(shù),本文將詳細(xì)介紹<fstream>頭文件的使用方法,包括函數(shù)原型、打開文件、讀取和寫入文件、以及錯誤處理等注意事項(xiàng),感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • C++設(shè)計模式之享元模式(Flyweight)

    C++設(shè)計模式之享元模式(Flyweight)

    這篇文章主要為大家詳細(xì)介紹了C++設(shè)計模式之享元模式Flyweight,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • C++ 實(shí)現(xiàn)LRU 與 LFU 的緩存算法

    C++ 實(shí)現(xiàn)LRU 與 LFU 的緩存算法

    設(shè)計和實(shí)現(xiàn)一個LRU 緩存機(jī)制。其支持獲取數(shù)據(jù) get 和 寫入數(shù)據(jù) put,設(shè)計并實(shí)現(xiàn)最少訪問頻率(LFU)緩存的數(shù)據(jù)結(jié)構(gòu)。LFU的每個數(shù)據(jù)塊都有一個引用計數(shù),所有數(shù)據(jù)塊按照引用計數(shù)排序,具有相同引用計數(shù)的數(shù)據(jù)塊則按照時間進(jìn)行排序。其支持get 和 put,具體了解請看下文
    2021-09-09
  • C語言實(shí)現(xiàn)簡單掃雷小程序

    C語言實(shí)現(xiàn)簡單掃雷小程序

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡單掃雷小程序,一款大眾類的益智小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10

最新評論