免費開始練習
地特四等 112年 [電子工程] 計算機概要

第 26 題

考慮下列 C 語言結構變數(Structure variable)的宣告:\nstruct member {\nint id;\nchar name[20];\nint age;\nchar gender;
};\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';。因此,直接嘗試變更陣列位址的行為會導致編譯錯誤。

▼ 還有更多解析內容

🏷️ 相關主題

程式語言語法與程式設計基礎
查看更多「[電子工程] 計算機概要」的主題分類考古題