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?
```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$。這也是許多初學者容易混淆的地方,認為只要變數名稱對應或在函式內賦值就會改變全域或主程式的值,而你精準避開了這個陷阱。
▼ 還有更多解析內容