今まで変数は、何処か分からないがメモリ上のある場所にあるとしてきたが、 本当は何処にあるのだろうか。このことを知る前に、メモリ上の場所をどうやって 区別するかという点について知る必要があるだろう。普通、住所などの番地は、 稚内市若葉台2丁目3番5号などのように階層的な構造を持っている。この例では、 最初は、市町村の区別から始まり、町名、何丁目、何番、何号のように階層化され ているが、コンピュータのメモリ上にはこのような階層的な概念は存在しない (最近ではそうした階層構造を取り入れるものも出てきているが、少なくとも C 言語にはそうした考え方はない)。従って、メモリの場所は一元的な整数のみで 指定されるようになっている。しかし、単純に整数で扱えるとすると、整数変数と 混同すると面倒であるし、利用上の問題も出てくる。そこで、C 言語では、 こうしたメモリ上の場所を指定するものをポインタと呼んでいる。そして、この ポインタ型の変数が特別に用意されている。また、このメモリ上の場所を取得したり、 メモリ上のデータを取り出すための演算子も用意されている。