ポインター渡し

読み:ポインターわたし
品詞:名詞

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]);

&を付ければ手動でポインターになるが、付けなくても自動でポインターになる。

ポインター

ポインターを引数として与える場合、&は付けなくて良い。むしろ、付けてはいけない。

但し、ポインター変数を引数に取る関数にポインター変数を渡すのは、ポインター渡しではなく値渡しである。

従って、呼ばれた側の関数でポインター変数を操作しても、呼び出し元のポインター変数は変化しない。

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club