C語言基礎

int m[3][4];
printf("%td\n", (char *)&m[2][1] - (char *)&m[0][0]);

int 為4位元組。執行上方程式碼時的輸出,下列何者正確?

  1. A9
  2. B20
  3. 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 位元組。
練習這個領域 前往領域頁面

C語言基礎的其他題目

  1. 關於放入字串的 char 陣列,執行上方程式碼時的輸出,下列何者正確?
  2. 在上方的宣告之後,寫入甲「p = t;」、乙「*p = 'x';」、丙「q = t;」、丁「*q = 'x';」其中之一。會發生編譯錯誤的組合為下列何者?
  3. 執行上方使用函式指標陣列的程式時的輸出,下列何者正確?
  4. fill 與 use 是另外定義的函式。上方函式的問題點,下列何者正確?
  5. 關於上方函式 make 所回傳的指標,下列何者正確?