C/C++

constとポインタ

更新日:

const指定子とポインタ

変数の宣言にconst指定子をつけると、以降値を変更できないことは定数で既に学習しました。

定数

これだけ見ると簡単ですが、このconstにポインタを絡めて考えると少し複雑になります。
しっかり読んで理解しましょう。

尚、このページではint型を例に挙げて説明しますが、基本的には他の型でも扱いは同じです。

const int型のポインタ

const int a;
const int *pa;

と書くとこれは「const int型の変数aへのポインタpa」を宣言したことになります。

この場合constが付き、変更が不可能なのは変数aとなります。
ポインタpaがconstに見えますが、こちらは変更可能です。

まとめると以下のようになります。

データ 変更
a ×
pa
&a ×
*pa ×

int型のconstなポインタ

int b;
int *const pb;


と書くとこれは「int型の変数bへのconstなポインタpb」となります。

すなわち、初期化したpbは、以降値の変更ができなくなるということです。
bには何も制限がないので、一般の変数として扱うことができます。

まとめると以下のようになります。

データ 変更
b
pb ×
&b
*pb

constとポインタのまとめ

const指定子とポインタの関係性は理解できたでしょうか。

これらの関係は重複することができます。
つまり、

const int c;
const int *const pc;


と書くとこれは「const int型の変数cへのconstなポインタpc」を宣言していることになります。

まとめると以下のようになります。

データ 変更
c ×
pc ×
&c ×
*pc ×

constは「変化することのない値」を保持する時に効果を発揮します。
使いどころとポインタとの兼ね合いを考え適切に使いこなしましょう。


-C/C++

Copyright© C言語/C++入門講座  ツナサーモン , 2019 All Rights Reserved Powered by AFFINGER5.