iT邦幫忙

0

資料結構(三)C語言要先宣告陣列大小

Python不用事先宣告陣列大小,但C語言中就要先宣告才能使用,這讓我產生疑惑。

【大綱】

  • 前言
  • 為什麼c語言不能直接增加
  • 總結

【前言】

有多少人用餐入座前要先講好。
臨時要加人的話需要重新入座。

https://ithelp.ithome.com.tw/upload/images/20190710/2009191092v4VhHyPS.jpg

Python:去隔壁桌拿張椅子就可以
VBA:要重新入座
C語言:重新入座+1


【為什麼C語言不能直接增加】

「陣列一開始就要宣告大小」,
這句話讓人感到茫然,
因為Python沒有這個問題(大概是小精靈在幫忙)。

VBA有看過同時使用DimReDim
那時候覺得多此一舉,
只用Dim宣告大小不就好了。
現在才明白為什麼

在陣列滿載情況下新增1個元素,
以下為三個語言作法。

Python

list = [2,3]
list.append(5)

VBA

Dim arr(1) As Long
arr = array(2,3)
ReDim arr(2)
arr(2) = 5

C語言

#include <stdio.h>

int main(){
    int arr[2];
    arr[0] = 2;
    arr[1] = 3;

    int newarr[3];

    for(int ari = 0;ari < 2;++ari){
    newarr[ari] = arr[ari];
    }

    newarr[2] = 3;
    return 0;
}

c語言陣列不夠放是一件麻煩事,
但鏈結串列可以解決這個問題,
直接加節點。


【總結】

讀資料結構才有機會學到「陣列是需要連續記憶體空間」,
因為要確認陣列大小,
才知道要分配多少記憶體空間。

題外話,推薦VBA陣列教學這是純英文教學寫得很深入,
很適合進階學習。

原本想趕12點前發文,結果還是超過。
感謝撥冗閱讀,有誤歡迎指教。


尚未有邦友留言

立即登入留言