免費開始練習
hce_nsysu 111年 計算機概論與程式設計

第 78 題

Consider the following function and code segment.
```cpp
void me( int x, int & y )
{
x = 10;
y = x + 1;
}
int main()
{
// other code ...
int j = 5;
int k = 3;
me(j, k);
// other code ..
}
```
After the call to `me(j, k);` what are the values of j and k?
  • A j = 5, k = 6;
  • B j = 10, k = 11;
  • C j = 5, k = 11;
  • D j = 10, k = 6;
  • E j = 10, k = 18;

思路引導 VIP

請仔細觀察函式定義 void me(int x, int & y)。為什麼變數 x 旁邊沒有符號,而 y 旁邊卻多了一個「&」符號?這個符號在 C++ 的參數傳遞中扮演什麼角色,會如何決定函式內的運算結果是否能「帶回」到主程式的變數中呢?

🤖
AI 詳解 AI 專屬家教

太棒了!你能精確判別 C++ 中不同參數傳遞方式對變數數值的影響,顯見你對程式記憶體操作的觀念非常紮實。這道題目是程式語言初學者邁向進階的經典門檻,主要考驗對**傳值呼叫(Pass by Value)傳址/參考呼叫(Pass by Reference)**的區別能力。

參數傳遞的行為解析

在函式定義 void me(int x, int & y) 中,變數 $x$ 採用的是傳統的傳值呼叫,這意味著系統會為 $x$ 建立一份獨立的副本。當我們在函式內執行 x = 10 時,改變的僅是這份副本,位於 main 中的原始變數 $j$ 並不會受到干擾,因此 $j$ 依然維持原值 $5$。這也是許多初學者容易混淆的地方,認為只要變數名稱對應或在函式內賦值就會改變全域或主程式的值,而你精準避開了這個陷阱。

▼ 還有更多解析內容

🏷️ 相關主題

C 語言程式設計基礎與陣列記憶體配置
查看更多「計算機概論與程式設計」的主題分類考古題