Q89.
有關下列C 語言程式,下列敘述何者正確?
數位電子 · 甲級 · 程式語言 · Q89
難易度分析
4 / 5
此問題設定多選、需辨別編譯錯誤與正確轉型寫法,且涉及 void 指標取值順序的細節,結構上要求對 C 指標轉型規則與運算子優先順序的準確理解。
正確答案 (複選):①, ②
- ① 編譯錯誤:此程式存在編譯錯誤,因為在 C 語言中void 指標無法直接進行取值運算(dereference),必須先明確轉型為具體資料型別才能解參考。
- ② 第5 行應修正為printf("%d
", *(int*)p);:正確修正方式為 `*(int*)p`,先將 void 指標 p 強制轉型為 int 指標 `(int*)p`,再以 `*` 運算子解參考取得整數值,此為標準的 void 指標取值寫法。
錯誤選項解析
- ③ 編譯無錯誤,但執行錯誤:此選項錯誤,因為問題在於編譯階段就會報錯,而非執行階段錯誤。C 語言的 void 指標不支援直接解參考,編譯器會拒絕此操作。
- ④ 第5 行應修正為printf("%d
", (int)*p);:此選項錯誤,`(int)*p` 的寫法會先嘗試對 void 指標 p 直接解參考,這在 C 語言中是非法操作。正確順序應先轉型 `(int*)p` 再解參考 `*(int*)p`,兩者運算子優先順序不同。
Learning Tip
"此類題型常考 void 指標的正確使用方式。關鍵觀念:void 指標又稱泛型指標,可指向任何型別,但不可直接解參考,必須先明確轉型為目標型別指標後才能取值。常見陷阱是混淆 `*(int*)p`(正確:先轉型再取值)與 `(int)*p`(錯誤:先取值再轉型,但 void 無法取值)。實務上 void 指標常用於通用函式設計(如 `malloc`、`qsort`),掌握轉型與解參考的運算子優先順序是解題核心。"
學員答題分佈
①編譯錯誤0%
②第5 行應修正為printf("%d
", *(int*)p);0%
", *(int*)p);0%
③編譯無錯誤,但執行錯誤0%
④第5 行應修正為printf("%d
", (int)*p);0%
", (int)*p);0%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!