今までの説明では、主に文字型のデータを扱ってきました。理由は文字型が1バイトのメモリ領域を必要とし、かつ使用しているコンピュータがメモリを1バイト単位でアドレッシングしているので、表記上、簡単だったからです。 C言語では、文字型以外にも様々なデータ型があり、それぞれに必要となるメモリ領域は異なります(使用するコンピュータの種類によっても異なります)。現在、使用しているコンピュータでは以下のように割り当てられます。・char型 :1バイト従って、下記のプログラムを実行すると、整数型(int)のデータは4バイト毎のメモリ領域に格納されるので、アドレスも4つずつ増え、下図のようなメモリ領域の状況となります。
・int型 :4バイト
・float型 :4バイト
・double型:8バイト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バイト先のアドレスを自動的に指すようになっている点です(これをアドレスのスケーリングと呼びます)。つまり、ポインタ変数を使用することにより、データ型のメモリ使用量を意識しなくても、データの参照ができることになります (ポインタ変数の型を、参照するデータの型に合わせて宣言するのは、このような意味があります)。