この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)
出典検索?: "ポインタ" プログラミング
ポインタ (英: pointer) とは、コンピュータプログラミングにおいて、変数や定数、サブルーチン(関数)などが置かれたメインメモリ上の番地(メモリアドレス)を格納するための特殊な変数のこと[1][2]。あるオブジェクトがなんらかの論理的位置情報に基づいてアクセスできるとき、それを参照する(指し示す)ためのものである。一般的な意味での「ポインタ」は「何かの位置を指し示すための仕組みや道具」のことであり、転じてコンピュータプログラミングの分野ではメモリアドレス参照の意味で使われるようになった。 コンピュータのメモリ空間(memory space
概要
(アセンブリ言語のような低水準言語ではない)高水準言語において、数値型(例えばCにおけるint型やdouble型)のような、ポインタではない型の変数は、そこに整数や小数といった値を格納するための入れ物であり、その配置場所がメモリ上のどのアドレス(番地)であるかは、取り立てて必要のない限りは意識しなくて済む仕様となっている。一方、この配置場所を値として格納するための変数がポインタである。
厳密にいうと、ポインタではない型の変数の場合も、変数自身が内部的に持つのは整数や小数の値そのものではなくその配置場所のアドレスである。ただしこのアドレス参照は高水準言語のプログラムコード上では隠蔽される。一方のポインタ変数では、値の配置場所のアドレスが格納されていることが高水準言語のコード上でも現れる。なお、レジスタベースのマシンでは、一部のローカル変数はスタックメモリではなくレジスタに直接割り付けられることもある。その場合、メモリ空間上には配置されない[注釈 2]。レジスタはごく少量だが高速な作業領域で、プロセッサの命令やそのオペランド、演算結果といったデータを一時的に格納するなどの目的で使用される。スタックポインタやプログラムカウンタ(インストラクションポインタ)のように、アドレスを指し示す専用レジスタも存在する。
ポインタという仕組みは、操作対象の位置を表すメモリアドレス値を直接参照したり書き換えたりすることができるため、ハードウェア寄りの操作や制御を行うのには都合が良い[1]。その反面、実行時に不正な値を入力されるようなことが起きると、プログラマが予期していなかった位置のデータやコードを読み書きしてしまう場合があり、深刻なバグ、しかもセキュリティの脆弱性となってしまうような深刻なバグがしばしば発生する[1]。→#問題点
多くのプログラミング言語においてポインタあるいはポインタに類する機能を利用できるが、C/C++に言語機能として実装されたポインタが特に有名である。なお、C++には、ポインタとは独立した類似の言語機能として、「参照」がある(#参照の節を参照)。
プログラムコード中では「ptr」と略されることも多い。
C言語のポインタ.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:#f9f9f9;display:flow-root}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}ウィキブックスにC言語関連の解説書・教科書があります。
最も典型的なポインタの例としては、C言語におけるポインタが挙げられる。C言語のポインタは「特定のメモリ領域を指し示す」ものである。ポインタを経由してメモリ上のデータにアクセスする際、参照するデータの型に応じたポインタ型を用いる。