陣列是相同類型元素的連續內存集合,下標從 0 開始。
int a[5] = {10, 11, 12, 67, 56}; // 完整初始化
int a[5] = {10, 11}; // 部分初始化,其餘為 0
int a[5] = {[3]=10, [4]=11}; // C99 指定初始化器
int a[] = {10, 11, 14}; // 省略長度,由初始化列表推斷
int n = 5; int a[n] = {10,11,12}; // C99 變長陣列(VLA)初始化(部分編譯器支援)
int a[]; // 錯:無長度且無初始化
int a[5]; a = {1,2}; // 錯:陣列名非左值,不可整體賦值
int a[] = {10, 11, 12, 78};
int len = sizeof(a) / sizeof(a[0]); // 僅在陣列定義作用域有效
for (int i = 0; i < len; i++)
printf("a[%d]=%d\n", i, a[i]);
注意:陣列作為函式參數時退化為指標,sizeof 失效,需額外傳遞長度。
int a[3][4] 在內存中按行優先連續存儲:a[0][0] a[0][1] ... a[0][3] a[1][0] ...。可視為 3 個長度為 4 的一維陣列首尾相接。
char s[] = {'h','i'} — 無結束符,非字符串,不可用 strlen/printf("%s")。char s[] = "hi" — 自動補 \0,長度為 3,標準字符串。