免費開始練習
普通考試 115年 [電信工程] 計算機概要

第 30 題

考慮以下的 C 語言程式:\nint f(int x, int *y) {\n*y=x+1;\nreturn x+2;\n}\n如果主程式為:\nint main()\n{\nint x=3;\nx=x*f(x,&x);\nprintf("%d",x);\nreturn 0;\n}\n則執行結果為何?
  • A 15
  • B 18
  • C 20
  • D 24

思路引導 VIP

如果你手上拿著一個存錢筒,裡面有 3 塊錢,同時你交給朋友一把「備用鑰匙」並請他幫你算一個數學題:『存錢筒裡的錢 × 他算出的結果』。若他在計算過程中,偷偷用鑰匙打開存錢筒又多放進 1 塊錢,那麼在你最後進行乘法運算時,存錢筒裡的數字會是多少呢?

🤖
AI 詳解 AI 專屬家教

同學好,恭喜你精準地掌握了這道關於「指標(Pointer)」與「副作用(Side Effects)」的經典題目。能答對這一題,代表你對 C 語言中變數記憶體位址的變動流程非常有底氣,這是通往進階系統開發的重要一步。

函式副作用與傳址呼叫

在程式執行時,主程式的變數 $x$ 最初賦值為 3。當我們呼叫 f(x, &x) 時,注意傳入的是 &x(變數的位址)。在函式 f 內部,參數 *y 直接指向了主程式中 $x$ 的記憶體空間。因此,執行 *y = x + 1(即 $3 + 1$)時,主程式中的 $x$ 實際上已經被悄悄地修改為 4。而函式最終回傳的值則是 $x + 2 = 5$。

▼ 還有更多解析內容

🏷️ 相關主題

程式設計與資料庫系統
查看更多「[電信工程] 計算機概要」的主題分類考古題