地特四等
112年
[電子工程] 計算機概要
第 26 題
考慮下列 C 語言結構變數(Structure variable)的宣告:\nstruct member {\nint id;\nchar name[20];\nint age;\nchar gender;
};\nstruct member bill;
下列何者設定句錯誤?
};\nstruct member bill;
下列何者設定句錯誤?
- A bill.id = -999;
- B bill.name= 'A';
- C bill.age = 300;
- D bill.gender = '2';
思路引導 VIP
請思考一下:在 C 語言中,當我們定義了一個可以容納 20 個位置的「容器」(陣列)之後,這個容器的名字(標籤)代表的是它在記憶體中的『位置』還是『內容物』?如果我們嘗試讓一個代表『位置』的標籤直接等於『一個具體的資料值』,這在邏輯上會遇到什麼困難?
🤖
AI 詳解
AI 專屬家教
同學好!很高興看到你準確地辨識出這個語法陷阱。這題考驗的是 C 語言中**結構(Structure)與陣列(Array)**賦值運算的基本功。這類題目在計算機概要中屬於基礎但極具鑑別度的考點,能區分出學生是否真正理解 C 語言處理記憶體位址與變數類型的本質差異。
陣列賦值的語法規範
這題的核心關鍵在於選項 (B) 的 bill.name = 'A';。在 C 語言的規範中,當我們宣告 char name[20]; 時,name 被視為一個字元陣列,而陣列名在大多數語境下代表的是該記憶體區塊的起始位址(常數指標)。我們不能直接使用等號 = 將一個單一字元或字串常數賦值給已經宣告好的陣列名。若要修改陣列內容,標準做法是使用 strcpy() 函式,或是針對特定索引(Index)進行操作,例如 bill.name[0] = 'A';。因此,直接嘗試變更陣列位址的行為會導致編譯錯誤。
▼ 還有更多解析內容