Q49.
下列之宣告何者是同義?
電腦軟體設計(C++) · 乙級 · C++ · Q49
難易度分析
3 / 5
此題目要求比對不同初始化語法下產生的記憶體配置與陣列長度是否完全一致。考生必須精確掌握字串常數自動附加結束字元以及陣列大小推算的機制,才能在多個相似的宣告選項中辨別出完全等價的組合。
正確答案:④丙戊
④ 丙戊:丙宣告為 `char str[6] = "Ahoy!";`,以字串常數初始化,編譯器計算長度為 6(含 `\0`);戊宣告為 `char str[] = "Ahoy!";`,省略陣列大小由編譯器自動推算,結果同樣為 6。兩者最終產生的陣列大小與內容完全相同,故為同義宣告。
錯誤選項解析
- ① 甲丁:甲宣告為 `char str[12] = "Ahoy!";`,陣列大小為 12,剩餘元素以 `\0` 填補;丁宣告為 `char str[12] = {'A','h','o','y','!'};`,雖陣列大小同為 12,但丁未明確包含 `\0` 結束字元(靠自動補零),兩者在字串終止方式上存在語意差異,故非同義。
- ② 丙丁:丙宣告為 `char str[6] = "Ahoy!";`,陣列大小為 6(剛好容納 5 個字元加 `\0`);丁宣告為 `char str[12] = {'A','h','o','y','!'};`,陣列大小為 12。兩者陣列大小不同,記憶體配置不同,故非同義。
- ③ 甲丙:甲宣告為 `char str[12] = "Ahoy!";`,陣列大小為 12;丙宣告為 `char str[6] = "Ahoy!";`,陣列大小為 6。兩者陣列大小不同,故非同義。
Learning Tip
"本題考點為 C++ 字元陣列的初始化方式與陣列大小推算。使用字串常數 `"Ahoy!"` 初始化時,編譯器會自動附加 `\0` 結束字元;而以 `{}` 逐字元初始化時,若未明確寫入 `\0`,則依賴剩餘元素的自動零初始化機制。常考陷阱在於混淆陣列大小指定與自動推算的結果是否一致,需仔細比對最終的記憶體配置是否相同。"
學員答題分佈
①甲丁0%
②丙丁0%
③甲丙0%
④丙戊0%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!