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

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

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

一、概念        

數組:一個存放相同類型數據的存儲空間。

int arr[10];
//數組arr的每個元素是int

指針數組:一個存放指針的數組。

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

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

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; 
    //取出數組的地址,p就是指向數組arr的指針,數組中每個元素類型是int,p就是數組指針
    
    //引出函數指針的問題
    int (*pf)(int, int) = &Add;
    //是一個指向函數的指針 - 存放函數的地址

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

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

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

二、用途

函數指針數組的用途:轉移表

三、案例:計算器      

(1)基礎代碼編譯:

#include <stdio.h>
//實現(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("輸入操作數: ");
                scanf("%d %d", &x, &y);
                ret = add(x, y);
                printf("ret = %d\n", ret);
                break;
        case 2:
                printf("輸入操作數: ");
                scanf("%d %d", &x, &y);
                ret = sub(x, y);
                printf("ret = %d\n", ret);
                break;
        case 3:
                printf("輸入操作數: ");
                scanf("%d %d", &x, &y);
                ret = mul(x, y);
                printf("ret = %d\n", ret);
                break;
        case 4:
                printf("輸入操作數: ");
                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)語句,實現(xiàn)了數據的輸入、輸出和函數調用,結構與功能簡單易懂,但主函數中代碼太過冗長,重復的代碼很多,這樣的結構導致后期拓展函數功能需改動的地方非常多。

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

#include <stdio.h>
//實現(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 };//轉移表
    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("輸入操作數: ");
            scanf("%d %d", &x, &y);
            ret = (*p[input])(x, y);
        }
        else
        {
            printf( "輸入有誤\n" );
            printf( "ret = %d\n", ret );
        }
        return 0;
}
       

敲重點?。。?nbsp;    敲重點?。?!  敲重點?。?!

這里我們看到函數指針數組的用法是:數組內容(函數指針)解引用得到函數地址,接著傳入參數,進行函數調用,結果返回一個整形(int)數據由ret接收。

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

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

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

相關文章

  • C++動態(tài)規(guī)劃之最長公子序列實例

    C++動態(tài)規(guī)劃之最長公子序列實例

    這篇文章主要介紹了C++動態(tài)規(guī)劃之最長公子序列,實例分析了C++求最長公子序列的相關技巧,是C++字符串操作的一個典型應用,需要的朋友可以參考下
    2015-04-04
  • C++通過ofstream和ifstream實現(xiàn)文件讀寫

    C++通過ofstream和ifstream實現(xiàn)文件讀寫

    本文詳細介紹了C++中通過ofstream和ifstream進行文件的讀寫操作,包括文件打開模式的選擇、錯誤處理策略以及二進制文件的特殊處理,重點講解了如何使用這些類進行文本和二進制文件的讀寫,并強調了正確處理文件操作中可能出現(xiàn)的錯誤,需要的朋友可以參考下
    2025-03-03
  • 利用C語言實現(xiàn)n字棋游戲

    利用C語言實現(xiàn)n字棋游戲

    本文將利用C語言編寫一個n字棋游戲,和井字棋一樣,不過這個游戲你可以自定義棋盤的大小。文中的示例代碼講解詳細,感興趣的小伙伴可以嘗試一下
    2022-05-05
  • C語言中 & 和 &&的區(qū)別詳解

    C語言中 & 和 &&的區(qū)別詳解

    這篇文章主要介紹了C語言中 & 和 &&的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • C語言實現(xiàn)linux網卡檢測改進版

    C語言實現(xiàn)linux網卡檢測改進版

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)linux網卡檢測的改進版,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • 淺析c++ 宏 #val 在unicode下的使用

    淺析c++ 宏 #val 在unicode下的使用

    以下是對c++中宏#val在unicode下的使用方法進行了詳細的分析介紹,需要的朋友可以參考下
    2013-07-07
  • 圖文詳解c/c++中的多級指針與多維數組

    圖文詳解c/c++中的多級指針與多維數組

    多維數組與多級指針是初學者經常感覺迷糊的一個地方。超過二維的數組和超過二級的指針其實并不多用。但只要掌握一定的方法,理解多級指針和“多維”數組完全可以像理解一級指針和一維數組那樣簡單。
    2016-08-08
  • C++實現(xiàn)LeetCode(189.旋轉數組)

    C++實現(xiàn)LeetCode(189.旋轉數組)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(189.旋轉數組),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • C++11各種鎖的具體使用

    C++11各種鎖的具體使用

    本文主要介紹了C++11各種鎖的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C++中防止頭文件重復包含的幾種方法

    C++中防止頭文件重復包含的幾種方法

    在 C/C++ 編程中,當一個項目比較大時,往往都是分文件,這時候有可能不小心把同一個頭文件 include 多次,或者頭文件嵌套包含,這些會導致一系列的問題,如符號重定義、編譯錯誤等,因此,防止頭文件的重復包含是至關重要的,本文給大家介紹了C++中防止頭文件重復包含的兩種方法
    2024-05-05

最新評論