加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 一、指針函數(shù)與函數(shù)指針
    • 二、指針數(shù)組與數(shù)組指針
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

面試???1:函數(shù)指針與指針函數(shù)、數(shù)組指針與指針數(shù)組~

08/12 11:40
1056
閱讀需 7 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

嵌入式開發(fā)領(lǐng)域,函數(shù)指針、指針函數(shù)、數(shù)組指針和指針數(shù)組是一些非常重要但又容易混淆的概念。理解它們的特性和應(yīng)用場景,對于提升嵌入式程序的效率和質(zhì)量至關(guān)重要。

一、指針函數(shù)與函數(shù)指針

指針函數(shù):

定義:指針函數(shù)是指返回值為指針的函數(shù)。

語法:返回值類型 *函數(shù)名(參數(shù)列表)。

示例代碼:

#include <stdio.h>#include <stdlib.h>
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: %dn", *sum);    free(sum);    return 0;}

應(yīng)用場景:

通常用于動態(tài)內(nèi)存分配的場景。比如在嵌入式系統(tǒng)中,需要根據(jù)不同的條件動態(tài)分配內(nèi)存來存儲數(shù)據(jù)時,可以使用指針函數(shù)。它可以根據(jù)輸入的參數(shù),在堆上分配合適大小的內(nèi)存空間,并返回指向該空間的指針。

函數(shù)指針:

定義:函數(shù)指針是指向函數(shù)的指針變量。

語法:返回值類型 (*指針變量名)(參數(shù)列表)。

示例代碼:

#include <stdio.h>
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: %dn", result1);
    funcPtr = subtract;    int result2 = funcPtr(5, 3);    printf("Subtraction result: %dn", result2);    return 0;}

應(yīng)用場景:

事件驅(qū)動系統(tǒng):在嵌入式系統(tǒng)中,可能會有多個不同的事件源(如按鍵、傳感器等),每個事件都對應(yīng)一個處理函數(shù)??梢允褂煤瘮?shù)指針來根據(jù)不同的事件調(diào)用相應(yīng)的處理函數(shù),提高系統(tǒng)的靈活性和可擴展性。

回調(diào)函數(shù):

當(dāng)一個函數(shù)需要在特定的操作完成后執(zhí)行另一個函數(shù)時,可以將另一個函數(shù)的指針作為參數(shù)傳遞給它。例如,在嵌入式網(wǎng)絡(luò)通信中,當(dāng)接收到數(shù)據(jù)后,調(diào)用一個預(yù)先定義的處理數(shù)據(jù)的回調(diào)函數(shù)。

二、指針數(shù)組與數(shù)組指針

指針數(shù)組

定義:指針數(shù)組是由指針組成的數(shù)組。

語法:數(shù)據(jù)類型 *數(shù)組名[數(shù)組大小]。

示例代碼:

#include <stdio.h>
int?main()?{    char *strings[] = {"Hello", "World", "Embedded"};    for (int i = 0; i < 3; i++)????{        printf("%sn", strings[i]);    }    return 0;}

應(yīng)用場景:

管理多個字符串:在嵌入式系統(tǒng)中,如果需要處理多個字符串,可以使用指針數(shù)組。每個指針指向一個字符串的首地址,這樣可以方便地對多個字符串進行操作和管理。

動態(tài)配置不同數(shù)據(jù)類型的指針:在一些需要根據(jù)不同情況動態(tài)配置不同數(shù)據(jù)類型指針的場景下,指針數(shù)組可以發(fā)揮作用。比如根據(jù)不同的傳感器類型,配置不同的指針來獲取相應(yīng)的數(shù)據(jù)。

數(shù)組指針:

定義:數(shù)組指針是指向數(shù)組的指針。

語法:數(shù)據(jù)類型 (*指針變量名)[數(shù)組大小]。

示例代碼:

#include <stdio.h>
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("n");    }    return 0;}

應(yīng)用場景:

多維數(shù)組的參數(shù)傳遞:在嵌入式程序中,當(dāng)需要將多維數(shù)組作為函數(shù)參數(shù)傳遞時,通常使用數(shù)組指針。這樣可以避免數(shù)組在傳遞過程中的降維問題,確保函數(shù)能夠正確訪問多維數(shù)組的元素。

指向動態(tài)分配的二維數(shù)組:在動態(tài)內(nèi)存分配的二維數(shù)組中,數(shù)組指針可以方便地管理和訪問二維數(shù)組的元素。例如,在嵌入式圖形處理中,動態(tài)分配一個二維像素數(shù)組,使用數(shù)組指針來操作該數(shù)組。

總之,在嵌入式開發(fā)中,正確理解和運用函數(shù)指針、指針函數(shù)、數(shù)組指針和指針數(shù)組,可以使程序更加靈活、高效和易于維護。通過掌握這些概念,開發(fā)者能夠更好地應(yīng)對各種復(fù)雜的嵌入式系統(tǒng)開發(fā)需求。

希望這篇文章能夠幫助大家理清這些容易混淆的概念及其在嵌入式中的應(yīng)用場景,讓我們在嵌入式開發(fā)的道路上更進一步。

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

微信號:zls_it

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
FOD4208V 1 Fairchild Semiconductor Corporation Triac Output Optocoupler, 1-Element, 5000V Isolation, LEAD FREE, DIP-6
$6.08 查看
AT25SF081B-SSHD-T 1 Adesto Technologies Corporation Flash Memory,

ECAD模型

下載ECAD模型
$0.31 查看
KSZ8873RLLI 1 Microchip Technology Inc DATACOM, LAN SWITCHING CIRCUIT, PQFP64
$6.1 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

微信公眾號《朱老師IT充電站》主筆。先后從事電子工程師、單片機軟件工程師、嵌入式linux軟件工程師、物聯(lián)網(wǎng)軟件工程師、架構(gòu)師等工作,教育品牌<朱老師物聯(lián)網(wǎng)大講堂>創(chuàng)始人,暢銷書作者。擅長U-Boot、linux kernel等嵌入式底層和系統(tǒng)層開發(fā)、架構(gòu)設(shè)計。擅長匯編、C/C++、Java、C#等常用開發(fā)語言。被授予:IBM技術(shù)專家、華為云享專家、51CTO學(xué)院金牌講師等稱號。