各データ型の占有するメモリ領域とポインタ演算

   3.1 各データ型の占有するメモリ領域
 今までの説明では、主に文字型のデータを扱ってきました。理由は文字型が1バイトのメモリ領域を必要とし、かつ使用しているコンピュータがメモリを1バイト単位でアドレッシングしているので、表記上、簡単だったからです。 C言語では、文字型以外にも様々なデータ型があり、それぞれに必要となるメモリ領域は異なります(使用するコンピュータの種類によっても異なります)。現在、使用しているコンピュータでは以下のように割り当てられます。
・char型 :1バイト
・int型 :4バイト
・float型 :4バイト
・double型:8バイト
 従って、下記のプログラムを実行すると、整数型(int)のデータは4バイト毎のメモリ領域に格納されるので、アドレスも4つずつ増え、下図のようなメモリ領域の状況となります。
int  data[3];   /* 配列の宣言 */
int  *ptr;      /* ポインタ変数の宣言 */

ptr = data;  
data[0] = 1;    /* 整数データの代入 */
data[1] = 2;
data[2] = 3;
メモリ領域のイメージ

 ここで重要なポイントは、ptr が char 型を指すポインタ変数の場合、 ptr+1 は1バイト先のアドレスを指しますが、 ptr が int 型なら ptr+1 は4バイト先のアドレスを自動的に指すようになっている点です(これをアドレスのスケーリングと呼びます)。つまり、ポインタ変数を使用することにより、データ型のメモリ使用量を意識しなくても、データの参照ができることになります (ポインタ変数の型を、参照するデータの型に合わせて宣言するのは、このような意味があります)。