ポインタ 【pointer】 ptr

概要

ポインタ(pointer)とは、何かの位置を指し示すための仕組みや道具などのこと。プログラミングでは、変数や関数などが置かれたメインメモリ上の番地などを格納する特殊な変数のことをポインタという。

解説 コンピュータがプログラムを実行する際、プログラムに含まれる変数や配列、構造体、関数、オブジェクトのインスタンスなどはメモリ上の特定の位置に配置されるが、その位置を指し示すメモリ空間上のアドレス値などを格納した変数のことをポインタという。C言語/C++言語に実装されたものが特に有名である。

操作対象の位置を表すメモリアドレス値を直接参照したり書き換えたりすることができるため、アセンブリ言語に近い低レベル(ハードウェア寄り)の操作や制御を行うのに都合が良い。反面、実行時に不正な値を入力されるなどしてメモリ上の予期せぬ位置のデータやコードを読み書きしてしまう場合があり、保安上の弱点(セキュリティ脆弱性)となる深刻なバグがしばしば発生する。

C言語ではアドレス演算子と呼ばれる単項演算子「&」(アンパサンド)を用いて p = &x; のように記述すると、変数xのポインタを取得(この例ではポインタ型の変数pに代入)することができる。逆に、間接演算子と呼ばれる「*」(アスタリスク)を用いて y = *p; のように記述すると、ポインタ変数pが指し示す値を取り出す(この例では変数yに代入)することができる。ポインタ型変数のポインタを取得することもできる。

C言語では関数の引数は値渡し(呼び出し側が指定した値を複製して引き渡す)にしか対応しないが、変数へのポインタを渡すことで呼び出し元の変数の内容を関数側が参照したり書き換えたりすることができ、参照渡しに近い動作を可能にする(参照の値渡し、ポインタ渡しなどと呼ばれる)。

また、関数の位置をポインタに格納して間接的に呼び出すことができるため、関数の引数を別の関数へのポインタとすることで、関数内で使用する関数を呼び出し側が引数を通じて指定・変更するといったこともできる。

(2019.1.23更新)

他の用語辞典による「ポインタ」の解説 (外部サイト)

資格試験などの「ポインタ」の出題履歴

▼ 基本情報技術者試験
令7修7 問5】 双方向のポインタをもつリスト構造のデータを表に示す。この表において新たな社員Gを社員Aと社員Kの間に追加する。追加後の表のポインタ a~f の中で追加前と比べて値が変わるポインタだけを全て列記したものはどれか。
令5公 問2】 双方向のポインタをもつリスト構造のデータを表に示す。この表において新たな社員Gを社員Aと社員Kの間に追加する。追加後の表のポインタ a~f の中で追加前と比べて値が変わるポインタだけを全て列記したものはどれか。
令4修7 問8】 双方向のポインタをもつリスト構造のデータを表に示す。この表において新たな社員Gを社員Aと社員Kの間に追加する。追加後の表のポインタ a~f の中で追加前と比べて値が変わるポインタだけを全て列記したものはどれか。
令1修12 問8】 双方向のポインタをもつリスト構造のデータを表に示す。この表において新たな社員Gを社員Aと社員Kの間に追加する。追加後の表のポインタ a~f の中で追加前と比べて値が変わるポインタだけを全て列記したものはどれか。
平28修7 問6】 双方向のポインタをもつリスト構造のデータを表に示す。この表において新たな社員Gを社員Aと社員Kの間に追加する。追加後の表のポインタ a~f の中で追加前と比べて値が変わるポインタだけを全て列記したものはどれか。
平27秋 問5】 ポインタを用いた線形リストの特徴のうち,適切なものはどれか。
平27修1 問5】 双方向のポインタをもつリスト構造のデータを表に示す。この表において新たな社員Gを社員Aと社員Kの間に追加する。追加後の表のポインタ a~f の中で追加前と比べて値が変わるポインタだけを全て列記したものはどれか。
平24修12 問5】 双方向のポインタをもつリスト構造のデータを表に示す。この表において新たな社員Gを社員Aと社員Kの間に追加する。追加後の表のポインタ a~f の中で追加前と比べて値が変わるポインタだけを全て列記したものはどれか。
平24春 問7】 多数のデータが単方向リスト構造で格納されている。このリスト構造には,先頭ポインタとは別に,末尾のデータを指し示す末尾ポインタがある。
平22春 問5】 双方向のポインタをもつリスト構造のデータを表に示す。この表において新たな社員Gを社員Aと社員Kの間に追加する。追加後の表のポインタ a~f の中で追加前と比べて値が変わるポインタだけを全て列記したものはどれか。