免費開始練習
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;
}
```
  • 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$。

▼ 還有更多解析內容

🏷️ 相關主題

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