LONGEPASS
數位電子/程式語言/Q75
困難
正確率 -
Q75.

有關標準C 語言中,union 執行下列程式後,請選出正確結果數位電子 乙級 程式語言 第 75 題 題目 圖片

數位電子 · 乙級 · 程式語言 · Q75

難易度分析

4 / 5

此題為複選題,考生必須精確判斷多個敘述的真偽。內容涵蓋 union 的記憶體空間共用特性、成員大小對整體記憶體配置的影響,以及小端序架構下位元組排列的邏輯,需要對記憶體佈局與資料型別轉換有深入的理解。

正確答案 (複選):①, ②

  • ① a[0] = 0x64:union 的所有成員共用同一塊記憶體空間,當以整數型態寫入資料後,透過 char 陣列 存取時,`a[0]` 會讀到位於最低位元組的值。在 小端序 (Little-Endian) 架構下,若寫入值為 100 (0x64),則 `a[0]` 確實等於 0x64。
  • ② sizeof(A1) = 8:union 的大小 由其最大成員所決定,並需考慮 記憶體對齊 (Memory Alignment)。若 union 中包含 `int` (4 位元組) 與 `char[8]` (8 位元組),則 `sizeof(A1)` 為 8 位元組。

錯誤選項解析

  • ③ A1.a = 10:union 共用記憶體的特性意味著同一時間只能有效儲存一個成員的值。若程式中最後一次寫入的是其他成員(如 char 陣列),則直接讀取 `A1.a` 會得到 非預期的值,而非 10。
  • ④ sizeof(A1) = 12:union 的 sizeof 取決於最大成員大小與對齊要求,並非所有成員大小之總和。此選項的 12 位元組是將各成員大小相加的錯誤概念,正確應為 8 位元組。
Learning Tip

"union 與 struct 的差異是常考重點:struct 的每個成員有獨立記憶體空間,大小為各成員總和(含對齊);union 所有成員共用記憶體,大小等於最大成員。此外需注意 Little-Endian 與 Big-Endian 對資料儲存的影響,以及 union 不具備型別安全性的實務風險。"

學員答題分佈

①a[0] = 0x640%
②sizeof(A1) = 80%
③A1.a = 100%
④sizeof(A1) = 120%

此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!

相似類型題目