初考-統計資料處理大意107 年第 19 題單選題
在程式語言中若副程式是以址傳遞(Call by Address)來進行設計時,實際上副程式的呼叫是以下列何者作為傳遞的參數?
B正確答案
Call by Address(傳址呼叫)傳遞的是變數的記憶體位址,副程式可直接修改原變數內容。
為什麼答案是 B
Call by Address 傳遞的正是變數的記憶體位址(指標),副程式透過位址存取並可修改原變數內容,這是定義本身。
載入中…
完整詳解
Pro · 無限重點 Call by Address(傳址呼叫)傳遞的是變數的記憶體位址,副程式可直接修改原變數內容。
看名字記:Address = 位址,直接對應選項 B,秒殺題。
逐選項分析
A✕ 陷阱
傳遞變數值是 Call by Value(傳值呼叫),副程式拿到的是複製品,改了不會影響原變數,與傳址不同。
B✓ 正確
Call by Address 傳遞的正是變數的記憶體位址(指標),副程式透過位址存取並可修改原變數內容,這是定義本身。
C✕
傳遞變數名稱接近 Call by Name(傳名呼叫,Algol 特有),每次使用時才求值,非 Call by Address。
D✕
傳遞計算結果屬於傳值的一種表現,也非 Call by Address 的定義。
副程式參數傳遞方式比較
| 方式 | 傳遞內容 | 能否改原變數 | 代表語言 |
|---|
| Call by Value | 變數值(複本) | 否 | C 預設 |
| Call by Address | 變數位址 | 可以 | C 指標、C++ & |
| Call by Reference | 變數參照(別名) | 可以 | C++、Java 物件 |
| Call by Name | 變數名稱(延遲求值) | 可以 | Algol 60 |
考選部常混用 Call by Value / Address / Reference / Name 四種傳遞方式。關鍵在「傳的是什麼」:Value 傳值、Address 傳位址、Reference 傳參照、Name 傳名稱,英文字面就是答案,勿被選項 A 變數值誤導。