C語言基礎
int m[3][4];
printf("%td\n", (char *)&m[2][1] - (char *)&m[0][0]);int 為4位元組。執行上方程式碼時的輸出,下列何者正確?
- A9
- B20
- C36
查看答案與解析
正確答案:C. 36
C語言的二維陣列以列優先排列,m[3][4] 依 m[0][0]~m[0][3]、m[1][0]~m[1][3]、m[2][0]~m[2][3] 的順序放置。m[2][1] 之前有兩列的 2 × 4 = 8 個,加上同一列的1個,共9個元素。每個元素為4位元組,因此與開頭的距離是 9 × 4 = 36 位元組。由於是轉換為 char * 之後才相減,差值以位元組數表示。
- A. 這是元素數(9個),沒有換算成位元組數。
- B. 這是認為以行優先(逐行排列)時的值((1 × 3 + 2) × 4 = 20)。
- C. 正確。(2 × 4 + 1) × 4 = 36 位元組。