ポインタ定数
ポインタ:インデックス への移動
ポインタあるいはそのポインタが指すオブジェクトの宣言に,const 修飾子を使うことができます。const として宣言されたものに対しては,代入はいっさい行えません。また,代入不可能な定数オブジェクトを変更する可能性のあるポインタの生成も不正です。次の例を考えてみてください。
int i; // i は int
int * pi; // pi は int へのポインタ(未初期化)
int * const cp = &i; // cp は int への定数ポインタ
const int ci = 7; // ci は定数 int
const int * pci; // pci は定数 int へのポインタ
const int * const cpc = &ci; // cpc は定数 int への
// 定数ポインタ
以下の代入は正当です。
i = ci; // int に定数 int を代入
*cp = ci; // 定数ポインタが指すオブジェクトに
// 定数 int を代入
++pci; // 定数 int へのポインタをインクリメント
pci = cpc; // 定数 int への定数ポインタを
// 定数 int へのポインタに代入
以下の代入は不正です。
ci = 0; // 不可--定数 int には代入できない
ci--; // 不可--定数 int は変更できない
*pci = 3; // 不可--定数へのポインタが指す
// オブジェクトには代入できない
cp = &ci; // 不可--実際の値は変更されなくても
// 定数ポインタには代入できない
cpc++; // 不可--定数ポインタは変更できない
pi = pci; // 不可--この代入が許されると,
// *pi への代入によって
// *pci (定数値) への代入が可能になってしまう
同様の規則は,volatile 修飾子にも適用されます。const と volatile を同一の識別子の修飾子として使用できることに注意してください。