Q34.
在C 語言中,下列宣告何者是錯誤的?
電腦軟體設計共同科目 · 乙級 · Q34
難易度分析
3 / 5
本題要求區分 C 語言中極其相似的宣告語法,特別是指標與陣列結合時優先權的差異。由於涉及容易混淆的型別定義,且需要精確判別語法正確性,因此判定為中等難度。
正確答案:④char (*suit)[4]={"spades","hearts","diamonds","clubs"};
④ char (*suit)[4]={"spades","hearts","diamonds","clubs"};:char (*suit)[4] 宣告的是指向長度為 4 之字元陣列的指標,而非指標陣列。此型別只能指向單一 `char[4]` 物件,無法用四個字串常數進行初始化,屬於型別不相容的錯誤宣告。
錯誤選項解析
- ① char *suit[4]={"spades","hearts","diamonds","clubs"};:char *suit[4] 宣告一個包含 4 個元素的指標陣列,每個元素都是 `char*` 型別,可分別指向四個字串常數,此為合法的 C 語言語法。
- ② char str[]={"pointers are fun"};:char str[] 使用字串常數初始化字元陣列,編譯器會自動計算陣列大小並包含結尾的 `\0`,大括號可省略但不影響合法性。
- ③ char *str={"pointers are fun"};:char *str 宣告一個字元指標並指向字串常數,大括號在此為多餘但不造成錯誤,字串常數會衰減為指標位址進行初始化。
Learning Tip
"本題核心考點在於區分指標陣列(`char *arr[N]`)與陣列指標(`char (*ptr)[N]`)的差異。前者是「多個指標」的集合,後者是「單一指標」指向固定大小的陣列。實務上常見混淆點為括號優先順序:`[]` 優先於 `*`,因此 `char *suit[4]` 解讀為陣列,而 `char (*suit)[4]` 因括號改變優先順序而解讀為指標。"
學員答題分佈
①char *suit[4]={"spades","hearts","diamonds","clubs"};0%
②char str[]={"pointers are fun"};0%
③char *str={"pointers are fun"};0%
④char (*suit)[4]={"spades","hearts","diamonds","clubs"};0%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!