宣告並初始化陣列

宣告一維陣列的一般語法是

type arrName[size];

其中 type 可以是任何內建型別或使用者定義的型別,例如結構體,arrName 是使用者定義的識別符號,size 是整數常量。

宣告一個陣列(在這種情況下是一個包含 10 個 int 變數的陣列)就像這樣:

int array[10];

它現在擁有不確定的數值。為了確保在宣告時它保持零值,你可以這樣做:

int array[10] = {0};

陣列也可以初始化,這個例子宣告瞭一個 10 個 int 型別資料的陣列,其中前 3 個 int 將包含值 123,所有其他值將為零:

int array[10] = {1, 2, 3};

在上面的初始化方法中,列表中的第一個值將分配給陣列的第一個成員,第二個值將分配給陣列的第二個成員,依此類推。如果列表大小小於陣列大小,則如上例所示,陣列的其餘成員將初始化為零。通過指定列表初始化(ISO C99),可以顯式初始化陣列成員。例如,

int array[5] = {[2] = 5, [1] = 2, [4] = 9}; /* array is {0, 2, 5, 0, 9} */

在大多數情況下,編譯器可以為你推斷出陣列的長度,這可以通過將方括號留空來實現:

int array[] = {1, 2, 3}; /* an array of 3 int's */
int array[] = {[3] = 8, [0] = 9}; /* size is 4 */

不允許宣告一個零長度的陣列。

Version < C11

在 C99 中加入可變長度陣列(簡稱 VLA),並在 C11 中任選。它們等於普通陣列,有一個重要區別:編譯時不必知道長度。VLA 具有自動儲存持續時間。只有指向 VLA 的指標才能具有靜態儲存持續時間。

size_t m = calc_length(); /* calculate array length at runtime */
int vla[m];               /* create array with calculated length */

重要:

VLA 是有潛在危險的。如果上例中的陣列 vla 要求堆疊上的空間多於可用空間,則堆疊將溢位。因此,在風格指南以及書籍和練習中經常不鼓勵使用 VLA。