ポインタ定数

提供: Appmethod Topics
移動先: 案内検索

ポインタ:インデックス への移動

ポインタあるいはそのポインタが指すオブジェクトの宣言に,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 修飾子にも適用されます。constvolatile を同一の識別子の修飾子として使用できることに注意してください。