ポインター渡し
読み:ポインターわたし
C/C++などにおける、関数への引数の渡し方の一つ。
概要
Cでは、値そのものか、値へのポインターのいずれかを引数として渡すことができる。前者を値渡し、後者をポインター渡しという。
C++でもこの値の渡し方はそのまま維持されている。
それより後に登場するモダンな言語はポインター変数を持たないので、同様の渡し方を参照を渡すように記述する「参照の値渡し」という値の渡し方が使われている。
特徴
使用例
ポインター渡しで受ける側の関数は、引数をポインター変数として定義する。
int hoge(int *var) { return *var; }
関数を呼ぶ側は、原則として参照演算子(アドレス演算子)であるアンパサンド記号(&)を変数名に冠してアドレスの形にする必要がある。
hoge(&foo);
配列
配列変数の場合、&は付けても付けなくても良い。
これは、C99なら§6.3.2.1などに記載があるが、配列は、普通に使えば殆どポインターに変換される存在だからである。
従って配列変数に限り、以下3つの関数呼び出しは、全て同じアドレスが渡される。
int foo[10];
hoge(foo);
hoge(&foo);
hoge(&foo[0]);
&を付ければ手動でポインターになるが、付けなくても自動でポインターになる。
ポインター
ポインターを引数として与える場合、&は付けなくて良い。むしろ、付けてはいけない。
但し、ポインター変数を引数に取る関数にポインター変数を渡すのは、ポインター渡しではなく値渡しである。
従って、呼ばれた側の関数でポインター変数を操作しても、呼び出し元のポインター変数は変化しない。
再検索