厳密にいうと、ポインタではない型の変数の場合も、変数自身が内部的に持つのは整数や小数の値そのものではなくその配置場所のアドレスである。ただしこのアドレス参照は高水準言語のプログラムコード上では隠蔽される。一方のポインタ変数では、値の配置場所のアドレスが格納されていることが高水準言語のコード上でも現れる。なお、レジスタベースのマシンでは、一部のローカル変数はスタックメモリではなくレジスタに直接割り付けられることもある。その場合、メモリ空間上には配置されない。レジスタはごく少量だが高速な作業領域で、プロセッサの命令やそのオペランド、演算結果といったデータを一時的に格納するなどの目的で使用される。スタックポインタやプログラムカウンタ（インストラクションポインタ）のように、アドレスを指し示す専用レジスタも存在する。
ポインタという仕組みは、操作対象の位置を表すメモリアドレス値を直接参照したり書き換えたりすることができるため、ハードウェア寄りの操作や制御を行うのには都合が良い。その反面、実行時に不正な値を入力されるようなことが起きると、プログラマが予期していなかった位置のデータやコードを読み書きしてしまう場合があり、深刻なバグ、しかもセキュリティの脆弱性となってしまうような深刻なバグがしばしば発生する。→#問題点
実際の例.
単純なポインタ.
複数のポインタ変数をまとめて宣言する場合は、以下のように書く必要がある。
 /* 以下はともに同じ意味を持つ。 */
/* 関数の呼び出し例。 */
または
「ポインタへのポインタ」（多重間接参照、ダブルポインタ）を定義することも可能である。動的に確保したメモリへのポインタを関数引数で返却するときや、ポインタ配列を扱うときなどに利用される。
関数ポインタ.
ポインタ演算.
ポインタ型のサイズは処理系依存であり、通例ターゲットとするプロセッサアーキテクチャのレジスタ幅と同じサイズを持つ。
問題点.
一方、関数型言語などの発展により、ポインタの必要性は、今後減少する可能性が。また、データベース領域では、SQLのように関係式からデータを導き出し情報の位置を抽象化する概念が古くからあり、こちらもプログラミングパラダイムに影響を与えることが。
参照.
ダングリングポインタ.
（）は解放後のメモリ領域を参照するポインタである。