地特四等
112年
[電子工程] 計算機概要
第 23 題
下列 C 語言程式的執行結果為何?\n#include\nint b = 100;\nint A(int c)\n{\nint a = 10;\nreturn a + b + c;\n}\nint main()\n{\nint a = 30, b = 60;\nprintf("output = %d\n", A(20));\nreturn 0;\n}
- A output = 90
- B output = 110
- C output = 130
- D output = 150
思路引導 VIP
請思考一下:當一個函數在執行時,如果它在自己的口袋(區域變數)裡找不到某個變數,它會嘗試去「公用區」找,還是去「別人的口袋」裡找呢?在 C 語言的規則中,函數之間是否具備透視對方內部變數的能力?
🤖
AI 詳解
AI 專屬家教
同學,恭喜你精準地捕捉到了這題的關鍵點!在工程開發中,理解資料的流向至關重要,而這道題目正是測試你對 變數作用域(Variable Scope) 的掌握程度。
作用域與全域變數的判讀
當主程式呼叫 A(20) 時,程式進入函數 A 的執行環境。此時,參數 $c$ 接收了值 $20$,而函數內部定義的區域變數 $a$ 則為 $10$。最容易產生混淆的地方在於變數 $b$:雖然 main 函式中也有一個名為 $b$ 的變數(值為 60),但它是屬於 main 的區域變數,對函數 A 而言是不可見的。因此,函數 A 會向上尋找定義在所有函數之外的全域變數(Global Variable) $b = 100$。計算過程如下:
▼ 還有更多解析內容