Q18.
依據下列仿Pascal 之程式語法結構,若以Pass- by-value-result 方式進行參數傳遞,程式在執行後,下列之結果何者是正確的?
電腦軟體設計共同科目 · 乙級 · Q18
難易度分析
4 / 5
本題涉及參數傳遞機制中的別名(Aliasing)現象,要求考生精確追蹤形式參數與實際參數在回寫階段的覆蓋邏輯,並需結合程式碼執行流程進行多步驟邏輯推演,具有較高的認知負荷。
正確答案:④2 1
④ 2 1:Pass-by-value-result(又稱 copy-in/copy-out)在呼叫時將實際參數的值複製給形式參數,過程結束時再將形式參數的值回寫。因 `i=1`,`x` 與 `y` 都對應 `a[1]`,`x` 遞增為 2、`y` 遞增為 2,回寫後 `a[1]=2`,而 `a[2]` 保持原值 1,故輸出 2 1。
錯誤選項解析
- ① 3 1:此結果假設兩個參數各自獨立遞增且未考慮 pass-by-value-result 的複製回寫機制。實際上 `a[1]` 與 `a[2]` 不會同時被修改為 3 和 1。
- ② 1 1:此結果假設陣列元素完全未被修改,忽略了 pass-by-value-result 在過程結束時會將區域變數的值 複製回寫 至原始實際參數對應的記憶體位置。
- ③ 2 2:此結果假設 `a[1]` 與 `a[2]` 都被修改為 2,但實際上兩次呼叫 `p(a[i], a[i])` 中 `i=1`,兩個形式參數都對應到 同一個陣列元素 `a[1]`,`a[2]` 不會被回寫。
Learning Tip
"Pass-by-value-result 的核心考點在於理解 複製進入(copy-in) 與 複製回寫(copy-out) 的兩階段機制。常考陷阱是當多個形式參數對應到同一個實際參數(如本題 `a[i]` 與 `a[i]` 都指向 `a[1]`)時,回寫順序與覆蓋效應會決定最終結果。另外需注意 全域變數 `i` 在過程內被修改為 2,但這不影響已綁定的參數對應關係,因為參數綁定發生在呼叫當下。"
學員答題分佈
①3 10%
②1 10%
③2 20%
④2 10%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!