計算機の主記憶装置は1バイト(8ビット)のメモリー素子をアドレス(番地)順に数10億個並べ、アドレスの値で個々のメモリー素子を区別しています。
多くのピログらミング言語が変数を用意し、変数名でメモリーを参照することを可能にしました。いちいちメモリーアドレスを意識しなくてもプログラムが書けるので便利です。しかし、変数に使うメモリーのアドレスはコンパイラにおまけせなので、プログラマーが使うメモリーを指定することは出来ません。
しかし、OSの様な計算機システムを制御するプログラムを記述する時には、メモリーアドレスを指定してのデータ参照やプログラム実行は欠かせない機能です。
C言語ではポインターを用いて、このようなアドレスを指定してのメモリー参照を可能にする仕組みが用意されています。この機能はOSのプログラムが書けると言うだけでなく関数呼び出しにおいてアドレスを渡すことで、関数から複数のデータを受け取れるなど、プログラムを作る上でも役に立ちます。
int型の配列を次のように定義したとき
int a[10];
配列aはint型のデータ10個分の連続したメモリー領域です。この配列領域の先頭アドレスは機械度プログラムの中にリテラルとして書かれます。