C語言基礎

char s[] = "abc", t[] = "xyz";
const char *p = s;
char *const q = s;

在上方的宣告之後,寫入甲「p = t;」、乙「*p = 'x';」、丙「q = t;」、丁「*q = 'x';」其中之一。會發生編譯錯誤的組合為下列何者?

  1. A甲與丁
  2. B乙與丙
  3. 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 指派,因此可以改寫。
練習這個領域 前往領域頁面

C語言基礎的其他題目

  1. 執行上方使用函式指標陣列的程式時的輸出,下列何者正確?
  2. fill 與 use 是另外定義的函式。上方函式的問題點,下列何者正確?
  3. 關於上方函式 make 所回傳的指標,下列何者正確?
  4. C語言中,建議在 free(p); 之後立刻寫 p = NULL; 的理由,下列何者最適當?
  5. 把8個字元的字串 "ABCDEFGH" 傳給上方的函式 save。會發生的事,下列何者正確?