配列とポインタについて

ポインタのポインタ

変数を宣言した時点でメモリ上に配置されるため、アドレスを持っていて、それを格納するためのものがポインタというのは説明しました。そして、ポインタも変数であるのでメモリのどこかのアドレスに割り当てられています。このアドレスを格納するためのものがポインタのポインタと呼ばれます。

理論上は「ポインタのポインタのポインタ」というように無限に繋げられますが、プログラムとしてわかりにくくなるため、一般的にはポインタのポインタまでが使われます。

実際に使われるのは、関数でのアドレス渡しを使用する場合が多いです。

通常、内部変数を関数に渡した場合には、呼び出し先の関数内で値を操作したとしても、呼び出し元の変数の値には影響を与えません。しかし、アドレスを渡すことによって、そのアドレスの値を操作すれば呼び出し元の変数も同じところを参照しているので内容が変えられるのです。値渡しと同じように関数を呼び出すのですが、呼び出し元でアドレスを実引数とし、呼び出し先でも仮引数をポインタで宣言することで利用することが可能です。このようにアドレスを元にデータの参照を行なうことを間接参照といいます。

文字列を扱う場合には、すでにアドレスで操作していることが多く、それを関数にアドレス渡しするときにはポインタのポインタを渡すことになります。このように文字列を扱う場合の配列などを関数感で共有して使うためにアドレス渡しを行なう際には、ポインタのポインタを使用することがあります。