C語言基礎
char s[] = "abc", t[] = "xyz";
const char *p = s;
char *const q = s;在上方的宣告之後,寫入甲「p = t;」、乙「*p = 'x';」、丙「q = t;」、丁「*q = 'x';」其中之一。會發生編譯錯誤的組合為下列何者?
- A甲與丁
- B乙與丙
- C乙與丁
查看答案與解析
正確答案:B. 乙與丙
const char *p 是「指向 const char 的指標」,不能透過 p 改寫所指向的字元,但可以把 p 本身改為其他位址。char *const q 是「指標本身為 const」,不能改變 q,但可以改寫 q 所指向的內容。因此乙(對 *p 指派)與丙(對 q 指派)會發生錯誤。可以這樣讀:const 在 * 的左邊時無法改變所指向的內容,在右邊時無法改變指標本身。
- A. 甲是改變 p 本身,丁是改變 q 所指向的內容,兩者都是允許的。
- B. 正確。改變 p 所指向的內容,以及改變 q 本身,會發生錯誤。
- C. 丁的 *q = 'x'; 是對非 const 的 char 指派,因此可以改寫。