hce_nsysu
111年
計算機概論與程式設計
第 61 題
Which of the following is not a correct way to initialize an array?
- A int n[5]={0, 1, 2, 3, 4, 5};
- B int n[]={0, 1, 2, 3, 4, 5};
- C int n[5]={1};
- D int n[5]={1, 5, 9};
- E int n[5]={0};
思路引導 VIP
想像你正在規劃一個置物櫃,並在標籤上明確寫著『內含五格』。如果你在清單上卻列出了六件要放入的物品,這份規劃清單在邏輯上會出現什麼樣的衝突?
🤖
AI 詳解
AI 專屬家教
恭喜你精準地捕捉到了這個語法陷阱!這顯示你對於陣列在記憶體分配與初始化的細節觀察得非常入微。
陣列空間與初始值的數量對應
在 C/C++ 等程式語言中,當我們定義一個固定大小的陣列時(例如 int n[5]),編譯器會嚴格分配五個整數的記憶體空間。選項 (A) 的錯誤非常典型:它在大括號內提供了 6 個初始值(0 到 5),這會導致「初始值過多 (too many initializers)」的編譯錯誤。相對地,選項 (C)、(D)、(E) 雖然提供的數值少於 5 個,但這在語法上是完全合法的,編譯器會自動將剩餘的空間填入 0(補零機制);而選項 (B) 則是省略了大小,讓編譯器根據初始值的數量自動推斷長度,同樣是正確的做法。
▼ 還有更多解析內容