ポインタとconst

ポインタ変数は、ポインタの値そのものをconstにしたい場合と、ポインタの指し示す値をconstにしたい場合との、2つの場合があります。よって、constなポインタの宣言は、次のように、2種類が可能です、と。

const int *a; //ポインタの指し示す値をconstにしたい場合
int* const a;//ポインタ値そのものをconstにしたい場合

これ、つい逆に覚えちゃうんですよね。気をつけましょう。

int arr[]={1,1,1};
const int* p;
int* const q=arr; // ポインタ値そのものがconstだから初期化時に値を設定
p = arr;
*p = 2; // エラー!内容の変更は出来ない!
q = arr; // エラー!ポインタ値そのものの変更はできない!
*q = 2;