電子產業(yè)一站式賦能平臺

PCB聯(lián)盟網

搜索
查看: 79|回復: 0
收起左側

面試?+1:函數指針與指針函數、數組指針與指針數組~

[復制鏈接]

446

主題

446

帖子

2503

積分

三級會員

Rank: 3Rank: 3

積分
2503
跳轉到指定樓層
樓主
發(fā)表于 2024-8-10 08:01:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
點擊上方藍字關注我們在嵌入式開發(fā)領域,函數指針、指針函數、數組指針和指針數組是一些非常重要但又容易混淆的概念。理解它們的特性和應用場景,對于提升嵌入式程序的效率和質量至關重要。

一、指針函數與函數指針

指針函數:
定義:指針函數是指返回值為指針的函數。
語法:返回值類型 *函數名(參數列表)。
示例代碼:
  • #include #include
    int *getNumber(int a, int b) {    int *result = (int *)malloc(sizeof(int));    *result = a + b;    return result;}
    int main() {    int *sum = getNumber(3, 4);    printf("Sum: %d
    ", *sum);    free(sum);    return 0;}
    應用場景:
    通常用于動態(tài)內存分配的場景。比如在嵌入式系統(tǒng)中,需要根據不同的條件動態(tài)分配內存來存儲數據時,可以使用指針函數。它可以根據輸入的參數,在堆上分配合適大小的內存空間,并返回指向該空間的指針。
    函數指針:
    定義:函數指針是指向函數的指針變量。
    語法:返回值類型 (*指針變量名)(參數列表)。
    示例代碼:
  • #include
    int add(int a, int b) {    return a + b;}
    int subtract(int a, int b){    return a - b;}
    int main() {    int (*funcPtr)(int, int);    funcPtr = add;    int result1 = funcPtr(5, 3);    printf("Addition result: %d
    ", result1);
        funcPtr = subtract;    int result2 = funcPtr(5, 3);    printf("Subtraction result: %d
    ", result2);    return 0;}
    應用場景:
    事件驅動系統(tǒng):在嵌入式系統(tǒng)中,可能會有多個不同的事件源(如按鍵、傳感器等),每個事件都對應一個處理函數?梢允褂煤瘮抵羔榿砀鶕煌氖录{用相應的處理函數,提高系統(tǒng)的靈活性和可擴展性。
    回調函數:
    當一個函數需要在特定的操作完成后執(zhí)行另一個函數時,可以將另一個函數的指針作為參數傳遞給它。例如,在嵌入式網絡通信中,當接收到數據后,調用一個預先定義的處理數據的回調函數。

    二、指針數組與數組指針

    指針數組
    定義:指針數組是由指針組成的數組。
    語法:數據類型 *數組名[數組大小]。
    示例代碼:
  • #include
    int main() {    char *strings[] = {"Hello", "World", "Embedded"};    for (int i = 0; i 3; i++)    {        printf("%s
    ", strings);    }    return 0;}應用場景:
    管理多個字符串:在嵌入式系統(tǒng)中,如果需要處理多個字符串,可以使用指針數組。每個指針指向一個字符串的首地址,這樣可以方便地對多個字符串進行操作和管理。
    動態(tài)配置不同數據類型的指針:在一些需要根據不同情況動態(tài)配置不同數據類型指針的場景下,指針數組可以發(fā)揮作用。比如根據不同的傳感器類型,配置不同的指針來獲取相應的數據。
    數組指針:
    定義:數組指針是指向數組的指針。
    語法:數據類型 (*指針變量名)[數組大小]。
    示例代碼:
  • #include
    int main() {    int arr[3][3] = {            {1, 2, 3},            {4, 5, 6},            {7, 8, 9}    };    int (*arrayPtr)[3] = arr;    for (int i = 0; i 3; i++) {        for (int j = 0; j 3; j++) {            printf("%d ", (*arrayPtr)[j]);        }        arrayPtr++;        printf("
    ");    }    return 0;}應用場景:
    多維數組的參數傳遞:在嵌入式程序中,當需要將多維數組作為函數參數傳遞時,通常使用數組指針。這樣可以避免數組在傳遞過程中的降維問題,確保函數能夠正確訪問多維數組的元素。
    指向動態(tài)分配的二維數組:在動態(tài)內存分配的二維數組中,數組指針可以方便地管理和訪問二維數組的元素。例如,在嵌入式圖形處理中,動態(tài)分配一個二維像素數組,使用數組指針來操作該數組。
    總之,在嵌入式開發(fā)中,正確理解和運用函數指針、指針函數、數組指針和指針數組,可以使程序更加靈活、高效和易于維護。通過掌握這些概念,開發(fā)者能夠更好地應對各種復雜的嵌入式系統(tǒng)開發(fā)需求。
    希望這篇文章能夠幫助大家理清這些容易混淆的概念及其在嵌入式中的應用場景,讓我們在嵌入式開發(fā)的道路上更進一步。

    歡迎轉發(fā)分享給需要的好友!


    微信號:zls_it

    掃描下方二維碼添加充電站小助手微信,可以加入微信交流群

    群內每天分享一些大廠的經典C語言、C++面試題以及知識點解析、技術話題分享、常見錯誤、易混淆的概念答疑等,等你來Get。



    START



  • 回復

    使用道具 舉報

    發(fā)表回復

    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規(guī)則


    聯(lián)系客服 關注微信 下載APP 返回頂部 返回列表