代碼片段:
int x[3][2] = {0}, i;
for(i=0; i<3; i++) scanf("%d", x[i]);
printf("%3d%3d%3d\n", x[0][0], x[0][1], x[1][0]);
// 輸入 2 4 6 輸出為何?
二維數組在記憶體中按行主序連續存儲:
x[0][0] x[0][1] x[1][0] x[1][1] x[2][0] x[2][1] 0 1 2 3 4 5 ← 線性索引
x[i] 退化為指向第 i 行首元素的指針(類型 int*),等價於 &x[i][0]。
// 輸入: 2 4 6 (以空格/換行分隔)
i=0: scanf("%d", x[0]) → 讀入 2 存入 x[0][0]
i=1: scanf("%d", x[1]) → 讀入 4 存入 x[1][0] (!!非 x[0][1])
i=2: scanf("%d", x[2]) → 讀入 6 存入 x[2][0]
結果:x[0][0]=2, x[0][1]=0, x[1][0]=4, x[1][1]=0, x[2][0]=6, x[2][1]=0
printf("%3d%3d%3d\n", x[0][0], x[0][1], x[1][0]);
// 輸出: 2 0 4
// 方法一:雙重循環
for(i=0; i<3; i++)
for(j=0; j<2; j++)
scanf("%d", &x[i][j]);
// 方法二:指針遍歷
for(i=0; i<3; i++)
for(j=0; j<2; j++)
scanf("%d", (*(x+i))+j); // 或 &x[i][j]
scanf("%d", x[i]) 只讀取一個整數到行首,非整行x 是行指針,x+i 跳過 i 行scanf 格式串匹配:%d 間用空白分隔,非逗號