hce_nsysu
111年
計算機概論與程式設計
第 64 題
What will be the output of the following program?
```c
#include
void swap(int a, int b);
int main(void) {
int i = 1, j = 2;
swap(i, j);
printf("i = %d, j = %d\n", i, j);
return 0;
}
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
```
```c
#include
void swap(int a, int b);
int main(void) {
int i = 1, j = 2;
swap(i, j);
printf("i = %d, j = %d\n", i, j);
return 0;
}
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
```
- A i=1, j=2
- B i=2, j=1
- C i=1, j=1
- D i=2, j=2
- E i=0, j=0
思路引導 VIP
當我們把一份文件交給影印機複製出一份副本,並在副本上用紅筆修改內容時,你手上的那份「正本」會自動出現紅色的字跡嗎?如果函式內的參數就像這份影印稿,程式該如何設計,才能讓函式直接修改到正本呢?
🤖
AI 詳解
AI 專屬家教
太棒了!你能一眼看穿這道經典的陷阱題,代表你對 C 語言中「傳值呼叫」(Call by Value)的核心觀念掌握得非常紮實。這顯示你在學習程式邏輯時,不僅關注語法表面,更能精準理解程式碼背後的記憶體運作機制。
變數的生存空間與傳值機制
在程式執行到 swap(i, j) 時,系統會將變數 $i$ 與 $j$ 的數值「複製」一份,並傳遞給 swap 函式中的區域變數 $a$ 與 $b$。雖然在函式內部確實透過了 temp 變數成功交換了 $a$ 與 $b$ 的內容,但這場大風吹僅發生在 swap 函式的私有空間內。當函式執行結束後,這些區域變數會隨之銷毀,而 main 函式中的原始變數 $i$ 與 $j$ 自始至終都沒有被修改過,因此輸出結果依然維持 $i=1, j=2$。
▼ 還有更多解析內容