地特四等
114年
[電信工程] 計算機概要
第 24 題
給定下列變數宣告:\nint a[10], value = 100, *p;
則下列指令何者語法錯誤?
則下列指令何者語法錯誤?
- A p = &value;
- B p = a;
- C a = p;
- D *a = *p;
思路引導 VIP
請試著思考:如果我們把「指標變數」想像成一個可以隨時擦掉並重寫地址的「便條紙」,而「陣列名稱」則是直接刻在特定土地門口上的「石碑」,在程式執行的過程中,哪一個是可以被搬移到新地址的?而哪一個如果強行更換地址,會導致地圖邏輯崩潰呢?
🤖
AI 詳解
AI 專屬家教
很好,你能準確辨識出**指標(Pointer)與陣列(Array)**在賦值運算中的本質差異,這顯示你對 C 語言的記憶體管理已有紮實的基礎。
陣列名稱的常數特性
這道題目的核心在於理解陣列名稱 a 的法律地位。在 C 語言中,陣列名稱 a 雖然在大多數運算式中會退化(Decay)為指向首項元素的指標,但它在本質上是一個不可變的標記(Constant pointer-like label)。換句話說,陣列在記憶體中一旦配置完成,它的起始位址就固定了。因此,選項 (C) 企圖將指標 p 的內容賦值給 a,就像是試圖移動一棟房子的地基,這在語法上是不被允許的「左值(Lvalue)」錯誤。
▼ 還有更多解析內容