免費開始練習
地特四等 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)」錯誤。

▼ 還有更多解析內容

🏷️ 相關主題

程式語言與資料結構
查看更多「[電信工程] 計算機概要」的主題分類考古題