LONGEPASS
數位電子/程式語言/Q89
困難
正確率 -
Q89.

有關下列C 語言程式,下列敘述何者正確?數位電子 甲級 程式語言 第 89 題 題目 圖片

數位電子 · 甲級 · 程式語言 · 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%
③編譯無錯誤,但執行錯誤0%
④第5 行應修正為printf("%d
", (int)*p);
0%

此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!

相似類型題目