ポインタの基本的概念

1.2 ポインタ変数
 C言語では、アドレスの値を格納しておく専用の変数を宣言することができます。この変数を特にポインタ変数と呼び、下記のように使用します。
char  data1 = 'a';  /* 変数宣言と初期化 */
char  data2 = 'b';  /* 変数宣言と初期化 */
char  *ptr;          /* ポインタ変数の宣言 */

ptr = &data1;       /* アドレスの代入 */
メモリ領域のイメージ

 ポインタ変数の宣言は、変数の前に * (間接演算子)をつけて *ptr のように指定し、データ型はそのポインタ変数の指すアドレスに入っているデータの型(例では文字型(char))に合わせます。この宣言が行われると、メモリ領域上にアドレスの値を入れるための箱が用意されます (図の場合、アドレス200番地以降に用意されます)。この時点では箱の中身は不定です。
 次に、変数 data1 の値の入っているメモリ領域のアドレス(例では101)をポインタ変数 ptr に代入した時点で、 ptr の箱にそのアドレス値が入ることになります。この例からもわかるように、ptr 自身がアドレス値を持つことになる点が通常の変数と異なる点です。そして、ptr の指すアドレスに入っている値(例では'a')は * をつけて *ptr で参照できます。