地方政府公務人員四等-資訊處理類科計算機概要110 年第 25 題單選題
若一個以列為主(Row-Major),8列(Row)4行(Column)的二維陣列A,每個陣列元素占用一個記憶體位址空間,已知A[6][3]的記憶體位址為1022,則A[1][1]的記憶體位址為何?
A正確答案
Row-Major(以列為主)的記憶體位址計算,利用兩元素間的列差與行差,算出相距的元素個數即可反推位址。
為什麼答案是 A
從 A[1][1] 到 A[6][3],列座標增加了 5 (即 6-1),行座標增加了 2 (即 3-1)。在以列為主 (Row-Major) 的排列下,每增加 1 列代表跳過一整列的元素(本題為 4 行,即 4 個元素)。因此兩者相距 5 × 4 + 2 = 22 個元素。已知每個元素占 1 個位址空間,A[1][1] 的位址為 1022 - 22 = 1000。
載入中…
完整詳解
Pro · 無限重點 Row-Major(以列為主)的記憶體位址計算,利用兩元素間的列差與行差,算出相距的元素個數即可反推位址。
兩元素相差 (6-1)=5 列與 (3-1)=2 行。跨越 1 列需跳過 4 個元素,總相距 = 5×4 + 2 = 22 個元素。1022 - 22 = 1000。
逐選項分析
A✓ 正確
從 A[1][1] 到 A[6][3],列座標增加了 5 (即 6-1),行座標增加了 2 (即 3-1)。在以列為主 (Row-Major) 的排列下,每增加 1 列代表跳過一整列的元素(本題為 4 行,即 4 個元素)。因此兩者相距 5 × 4 + 2 = 22 個元素。已知每個元素占 1 個位址空間,A[1][1] 的位址為 1022 - 22 = 1000。
B✕ 陷阱
計算錯誤。可能是將行差或列差算錯,或是誤將起始索引的偏移量少減了 1,導致算出的距離為 21,反推得到 1001。
C✕
計算錯誤。未能正確應用 Row-Major 的公式,算出的距離不符 22。
二維陣列記憶體排列方式
| 排列方式 | 概念 | 跨列距離 | 跨行距離 |
|---|
| 以列為主 (Row-Major) | 一列放完再放下一列 (C/C++, Python) | 總行數 (Column Size) | 1 |
| 以行為主 (Column-Major) | 一行放完再放下一行 (Fortran, MATLAB) | 1 | 總列數 (Row Size) |
考生最常犯的錯誤是把「總列數(8)」和「總行數(4)」搞混。在 Row-Major 中,因為是一列一列放,所以跨越一列時,要跳過的是「一整列的元素個數」,也就是「總行數(4)」,千萬不要乘到總列數(8)。