民國115年 普通考試 電子工程 計算機概要

第30題

考慮以下的C 語言程式:int f(int x, int *y) {*y=x+1;return x+2;}如果主程式為:int main(){int x=3;x…

題目

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

官方答案

  • 答案:C. 20

解析

函式 f 的第一個參數 x 是傳值(call by value),是副本;第二個參數 y 是指標,指向主程式中的 x。呼叫 f(x,&x) 時,*y=x+1 會把主程式的 x 由 3 改成 4,但函式內部的副本 x 仍為 3,故 return x+2 回傳 5。由於 *y 已改動主程式的 x,乘法時讀到的 x 為 4,因此 x=4×5=20。若誤認函式回傳 6(把副本也當成已更新)會得到 18 或 24;若忽略指標造成的修改則得 15。C 語言雖未嚴格規定運算元求值順序,但本題評量的是傳值與傳址的差異,答案為 20。

AI 參考解析(推得答案已與官方答案比對一致),非官方公告內容,僅供備考參考。

官方資料

答案以考選部公告之測驗式試題標準答案 PDF 為準。