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

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

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

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

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

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

指針函數(shù):

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

語(yǔ)法:返回值類(lèi)型 *函數(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)用場(chǎng)景:

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

函數(shù)指針:

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

語(yǔ)法:返回值類(lèi)型 (*指針變量名)(參數(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)用場(chǎng)景:

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

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

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

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

指針數(shù)組

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

語(yǔ)法:數(shù)據(jù)類(lèi)型 *數(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)用場(chǎng)景:

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

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

數(shù)組指針:

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

語(yǔ)法:數(shù)據(jù)類(lèi)型 (*指針變量名)[數(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)用場(chǎng)景:

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

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

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

希望這篇文章能夠幫助大家理清這些容易混淆的概念及其在嵌入式中的應(yīng)用場(chǎng)景,讓我們?cè)谇度胧介_(kāi)發(fā)的道路上更進(jìn)一步。

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

微信號(hào):zls_it

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
HFBR-1414 1 Broadcom Limited Transmitter, 792nm Min, 865nm Max, 20Mbps, ST Connector, Through Hole Mount, PLASTIC, DIP-8

ECAD模型

下載ECAD模型
暫無(wú)數(shù)據(jù) 查看
74HC595BQ,115 1 NXP Semiconductors 74HC(T)595 - 8-bit serial-in, serial or parallel-out shift register with output latches; 3-state QFN 16-Pin
$0.41 查看
TCAN4550RGYRQ1 1 Texas Instruments Automotive system basis chip (SBC) with integrated CAN FD controller &amp; transceiver 20-VQFN -40 to 125

ECAD模型

下載ECAD模型
暫無(wú)數(shù)據(jù) 查看

相關(guān)推薦

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

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