ポインタの話を始める前に、ここでいわゆるフォン・ノイマン型のコンピュータの基本構造をもう一度復習しておきます。なぜなら、ここが解っていないとそもそもポインタが説明できません。
プログラムは図にある、主記憶装置<メモリ>に蓄えられ、実行されます。
コンピュータのメモリ領域の構造を頭の中に入れておくと、ポインタの概念を理解しやすくなります。そこで、例として次のプログラムを実行させた場合のメモリ領域の状態を考えてみます。
char data1, data2; /* 変数宣言 */ data1 = 'a'; /* 文字データの代入 */ data2 = 'b';
このとき、メモリ領域の状況は上図のようになります(ただし、コンピュータの環境により、アドレスの値は図のとおりになるとは限りません)。まず、変数宣言した時点でメモリ領域上のある場所に変数data1用とdata2用の格納領域(箱のようなもの)が用意されます(この段階では、箱の中身は不定)。
次に、データ 'a' と 'b' が代入された時点で、その領域にデータが入る仕組みになっています。ここで、メモリ上の位置を示す値をアドレス(address、番地)と呼び、 C言語では、このようなデータの格納されているアドレスを参照することができます。例えば、変数 data1 の値(例では 'a' )が格納されているアドレスの値を参照するには、変数の前に& (アドレス演算子)をつけて &data1 とします。上図の場合、参照された値は 101 を返すことになります。