若定義 int a[3][4] = {{1,2},{0},{4,6,8,10}};,初始化後 a[1][1] 與 a[2][2] 的值為何?
a[1][1] = 0a[2][2] = 8二維陣列在記憶體中以列優先 連續儲存:a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] ...
初始化列表: {{1,2}, {0}, {4,6,8,10}}
行索引: 行 0 行 1 行 2
列數: 2 個 1 個 4 個 (滿 4 列)
補零規則: 後 2 列=0 後 3 列=0 無需補零
| col 0 | col 1 | col 2 | col 3 | |
|---|---|---|---|---|
| row 0 | 1 | 2 | 0 | 0 |
| row 1 | 0 | 0 | 0 | 0 |
| row 2 | 4 | 6 | 8 | 10 |
int a[3][4] = {0}; 或 int a[3][4] = {}; (C23),全陣列歸零#include <stdio.h>
int main() {
int a[3][4] = {{1,2},{0},{4,6,8,10}};
printf("a[1][1] = %d\n", a[1][1]); // 輸出 0
printf("a[2][2] = %d\n", a[2][2]); // 輸出 8
// 列印全陣列
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%3d", a[i][j]);
}
printf("\n");
}
return 0;
}
int (*p)[4] = a; // 指向 4 個 int 的陣列指標
printf("%d\n", *(*(p+1)+1)); // 等價 a[1][1] → 0
printf("%d\n", *(*(p+2)+2)); // 等價 a[2][2] → 8