宣告並初始化陣列
宣告一維陣列的一般語法是
type arrName[size];
其中 type
可以是任何內建型別或使用者定義的型別,例如結構體,arrName
是使用者定義的識別符號,size
是整數常量。
宣告一個陣列(在這種情況下是一個包含 10 個 int 變數的陣列)就像這樣:
int array[10];
它現在擁有不確定的數值。為了確保在宣告時它保持零值,你可以這樣做:
int array[10] = {0};
陣列也可以初始化,這個例子宣告瞭一個 10 個 int
型別資料的陣列,其中前 3 個 int
將包含值 1
,2
,3
,所有其他值將為零:
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。