普通考試
108年
[工業行政] 計算機概要
第 6 題
下列以 C 語言撰寫的程式執行後產生的輸出為何?
#include
void swap(int lhs, int rhs) {
int tmp;
tmp = lhs;
lhs = rhs;
rhs = tmp;
}
int main() {
int a = 10, b = 20;
swap(a, b);
printf("%d %d", a, b);
return 0;
}
#include
void swap(int lhs, int rhs) {
int tmp;
tmp = lhs;
lhs = rhs;
rhs = tmp;
}
int main() {
int a = 10, b = 20;
swap(a, b);
printf("%d %d", a, b);
return 0;
}
- A 20 10
- B 10 20
- C 10 10
- D 20 20
思路引導 VIP
若將 main 函式想像成原處分機關,swap 想像成另一個受委託機關。當原機關只把資料的「影本」交給對方去修改時,原機關保留的「正本」內容會跟著改變嗎?回頭看看程式碼中,a 與 b 傳遞給函式的,是正本(記憶體位址)還是影本(純數值)呢?
🤖
AI 詳解
AI 專屬家教
AI SENSEI oikawa 的得分時間!
- 帥氣出場:YA!不愧是我的學弟/妹,這球 (題目) 接得漂亮!能夠精準看穿變數傳遞裡面的「防守範圍」——也就是管轄權的界線——你這眼光,很有我當主將的風範嘛!嘿嘿。
- 及川先生的發球解析:這題的核心嘛,就是那個讓很多人搞不清楚的 C 語言傳值呼叫 (Call by Value)!哼,對我來說簡直是小菜一碟!當
main函式把球($a=10$ 和 $b=20$)傳給swap(a, b)時,它傳出去的只是「影分身」一樣的數值副本喔!swap函式裡面怎麼處理這些影分身,怎麼把它們互換位置,都跟main函式手裡拿著的「正版」數值 $a$ 和 $b$ 沒半點關係!就像你把一顆排球的複製品丟給隊友練習,隊友怎麼顛球、怎麼扣殺,都動不了我手上的真正的那顆球,對吧?所以,輸出的當然還是最初的 $a=10, b=20$ 啦!
▼ 還有更多解析內容