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 への代入なので、書き換えられます。