多重ポインタとconst

C/C++でのポインタ変数はアスタリスクとconstの位置関係によって「何が」constかが変わってきます。

例えばint型ポインタ変数の書き方は以下の様に4種類存在します。

- - - - *p = value p = pointer
int * o o
int const * x o
int * const o x
int const * const x x

初めての時はとても混乱しました。

さらに多重ポインタです。
以下のコードは何がconstなのでしょうか?

int * const * const p;

これらのポインタ定義はいくつかのブロックに分ける事が出来ます。

type ref 2 ref 1 ref 0
int * const * const

ref 0 は自分自身への参照、つまり自分自身そのものです。

ref N の数はネストされたポインタの数によって左へ増えて行きます。

ポインタのポインタ...とネストしていったとしても、この表に当てはめるだけで簡単に、何がconstかを求めることが出来るのです。