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

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

嵌入式 C 語言知識點,動態(tài)變長數(shù)組

07/30 09:35
1564
閱讀需 5 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

我是老溫,一名熱愛學(xué)習(xí)的嵌入式工程師,關(guān)注我,一起變得更加優(yōu)秀!

我們在編寫 C 語言程序的時候,如果使用的編譯器只支持 C89 標準,那么,在定義數(shù)組的時候,數(shù)組長度必須確定,例如:int arr[10],因為數(shù)組是靜態(tài)分配內(nèi)存的,所以數(shù)組的長度必須要在編譯時進行確定。

當然,我們也可以采用指針變量和動態(tài)內(nèi)存分配的方式,來模擬動態(tài)數(shù)組的行為,可以使用 malloc 或者 calloc 相關(guān)的函數(shù),在程序運行時進行動態(tài)內(nèi)存分配。

示例代碼如下:

#include?<stdio.h>#include <stdlib.h>
int main() {????int?*arr?=?NULL;    int n = 10;    // 動態(tài)分配數(shù)組    arr = (int *)malloc(n * sizeof(int));
    if (arr == NULL)return -1;    // 使用數(shù)組    for (int i = 0; i < n; i++) {        arr[i] = i;    }
    // 打印數(shù)組內(nèi)容    for (int i = 0; i < n; i++) {        printf("%d mn ", arr[i]);    }
    // 釋放內(nèi)存    if(NULL != arr)free(arr);
    return 0;}

然而,除了使用 malloc 來模擬實現(xiàn)動態(tài)數(shù)組的功能之外,在 C 語言的 C99 標準里面,還引入了可變長數(shù)組(VLA)的概念,也就是說,可以允許數(shù)組的長度在程序運行時進行確定。

示例代碼如下:

#include <stdio.h>
int main() {????int?n?=?0;    printf("Enter the number of elements: ");    scanf("%d", &n);
    // 創(chuàng)建一個VLA    int arr[n];
    // 使用VLA    for (int i = 0; i < n; i++) {        arr[i] = i * i;    }
    // 打印數(shù)組內(nèi)容    for (int i = 0; i < n; i++) {????????printf("%d?mn",?arr[i]);    }
    return 0;}

C99 標準里面的可變長數(shù)組特性,它允許數(shù)組在運行時才確定大小,尤其是在處理大小不確定的數(shù)據(jù)集時,可變長數(shù)組(VLA)為程序員提供了更大的靈活性。

使用可變長數(shù)組(VLA)的優(yōu)勢:

1、動態(tài)分配大?。?/strong>使用可變長數(shù)組,可以根據(jù)實際需要,在程序運行時分配數(shù)組的帶下,在處理不確定大小的數(shù)據(jù)集時,非常有用。

2、減少內(nèi)存浪費:由于可變長數(shù)組是運行時才確定其大小的,因此可以避免在編譯時分配固定內(nèi)存,造成內(nèi)存浪費。

但是,可變長數(shù)組(VLA)這種特性有利也有弊,在使用的時候需要注意一些潛在的問題。

使用可變長數(shù)組的注意事項:

1、編譯器兼容問題:不是所有的編譯器都支持 C99 標準里面的VLA特性,并且可能需要特定的編譯器標志位來啟用。

2、程序可移植性:VLA特性在 C11 標準里面已經(jīng)被進行標記,可能會在未來的 C 語言標準中移除,因此需要注意代碼的可移植性。

3、棧溢出風(fēng)險:VLA在程序運行時分配數(shù)組空間大小,其位于內(nèi)存的棧區(qū)域,使用不當可能會導(dǎo)致棧溢出。

4、性能優(yōu)化問題:編譯器可能無法對VLA進行優(yōu)化,其代碼性能可能不如靜態(tài)分配數(shù)組或使用malloc分配內(nèi)存。

總的來說,可變長數(shù)組(VLA)特性,在編譯時不確定數(shù)組大小,而是在程序運行時才確定,在使用時需要權(quán)衡其優(yōu)缺點,并且注意潛在的風(fēng)險。在某些情況下,使用VLA特性與動態(tài)內(nèi)存 malloc 分配,可能會是一個不錯的選擇。

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
FOD817ASD 1 onsemi 4-Pin DIP Phototransistor Optocouplers, 1000-REEL

ECAD模型

下載ECAD模型
$0.52 查看
AFBR-5972Z 1 Foxconn Transceiver, 635nm Min, 675nm Max, 100Mbps(Tx), 100Mbps(Rx), Panel Mount, ROHS COMPLIANT PACKAGE
$150.74 查看
KSZ8895MQXI 1 Microchip Technology Inc DATACOM, ETHERNET TRANSCEIVER
$6.88 查看

相關(guān)推薦

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