24 給定下列變數宣告:
int a[10], value = 100, *p;
則下列指令何者語法錯誤?
(A) p = &value;
(B) p = a;
(C) a = p;
(D)*a = *p;
答案:登入後查看
統計: A(43), B(42), C(86), D(68), E(0) #3704767
統計: A(43), B(42), C(86), D(68), E(0) #3704767
詳解 (共 1 筆)
#7312513
(A) p = &value;: 正確。將 value 變數的地址賦予指標 p,這是指標最基本的用法。
(B) p = a;: 正確。陣列名 a 會自動退化(Decay)為指向首元素的指標,將其地址賦予 p 是合法的。
(C) a = p;: 錯誤(語法不合法)。
原因: a 是一個常數(L-value),它代表的是一個固定的記憶體區塊首位。你不能把另一個地址賦予一個常數。
邏輯: 陣列的名稱不能作為賦值的左值(Left-hand side of assignment)。
(D) *a = *p;: 正確。
分析: *a 代表陣列的第一個元素 a[0],*p 代表 p 所指向的數值。這是一個簡單的「數值賦值」動作(把一個整數存入另一個整數空間),語法完全正確。
0
0