地方政府公務人員四等-電子工程類科計算機概要109 年第 24 題單選題
C 語言程式中,陣列 A 宣告如下:int A[20][200];
程式中並有一行敘述如下:
*(A+420)=1000;
此敘述所執行的運算與下列何者相同?
AA[4][20]=1000;
BA[2][20]=1000;正確答案
CA[20][2]=1000;
DA[2][2]=1000;
B正確答案
C語言二維陣列在記憶體中以「列為主(Row-major)」連續存放。偏移量公式為「i * 總行數 + j」。將總偏移量 420 除以總行數 200,商為 2 (列索引),餘數為 20 (行索引),即 A[2][20]。
為什麼答案是 B
A[2][20] 的一維偏移量計算為:2 * 200 + 20 = 420。符合題目 *(A+420) 所指的記憶體位置(國考常將二維陣列名稱視為一維基底位址來考偏移量)。
載入中…
完整詳解
Pro · 無限重點 C語言二維陣列在記憶體中以「列為主(Row-major)」連續存放。偏移量公式為「i * 總行數 + j」。將總偏移量 420 除以總行數 200,商為 2 (列索引),餘數為 20 (行索引),即 A[2][20]。
總偏移量 420 = i * 200 + j。計算 420 ÷ 200 = 2 (餘 20),對應索引為 [2][20],秒選 B。
逐選項分析
A✕
A[4][20] 的一維偏移量計算為:4 * 200 + 20 = 820,與題目的 420 不符。
B✓ 正確
A[2][20] 的一維偏移量計算為:2 * 200 + 20 = 420。符合題目 *(A+420) 所指的記憶體位置(國考常將二維陣列名稱視為一維基底位址來考偏移量)。
C✕ 陷阱
A[20][2] 的一維偏移量為:20 * 200 + 2 = 4002。此外,宣告為 A[20][200] 時,列索引最大只能到 19,A[20] 已經發生陣列越界(Out of bounds)。
D✕
A[2][2] 的一維偏移量計算為:2 * 200 + 2 = 402,與題目的 420 不符。
二維陣列記憶體映射 (Row-major)
| 陣列宣告 | 目標元素 | 一維偏移量公式 | 本題代入計算 |
|---|
| A[M][N] | A[i][j] | i * N + j | i * 200 + j = 420 |
| (M為總列數, N為總行數) | (i為列索引, j為行索引) | (N為每一列的元素個數) | i=2, j=20 (A[2][20]) |
考生常搞混要除以「總列數(20)」還是「總行數(200)」。C語言是Row-major,代表記憶體是「一列一列」放的,要跳過一整列需要跨過 200 個元素,因此計算列索引(i)時,必須除以總行數(200)。