変数についてで説明したように、各変数にはサイズがあります。
しかし、変数のサイズは環境によって異なる可能性があるため、自分で勝手に設定することは危険です。
C言語では、sizeofという命令を使って変数のサイズを調べることが出来ます。
int型の変数aがあったとします。
int a; |
この変数のサイズ(バイト数)は、
sizeof(int); |
または、
sizeof(a); |
で求めることが出来ます。
次のプログラムで自分の環境を調べてみましょう。
<sample program col030-01>
#include <stdio.h>
int main(void)
{
printf("char = %d\n", sizeof(char));
printf("short = %d\n", sizeof(short));
printf("long = %d\n", sizeof(long));
printf("int = %d\n", sizeof(int));
printf("float = %d\n", sizeof(float));
printf("double = %d\n", sizeof(double));
return 0;
}
|
<実行結果>
char = 1 short = 2 long = 4 int = 4 float = 4 double = 8 続行するには何かキーを押してください・・・
※私の実行環境での結果です。
もちろん、下のプログラムでも同じ動作をします。
<sample program col030-02>
#include <stdio.h>
int main(void)
{
char a;
short b;
long c;
int d;
float e;
double f;
printf("char = %d\n", sizeof(a));
printf("short = %d\n", sizeof(b));
printf("long = %d\n", sizeof(c));
printf("int = %d\n", sizeof(d));
printf("float = %d\n", sizeof(e));
printf("double = %d\n", sizeof(f));
return 0;
}
|
<実行結果>
char = 1 short = 2 long = 4 int = 4 float = 4 double = 8 続行するには何かキーを押してください・・・
※私の実行環境での結果です。
コラムの表はビット数でしたが、こちらはバイト数なので、1バイト=8ビットで見比べてください。
int型は「処理系依存」と書いてありますが、私の使っている環境だと「4バイト」です。
次に配列のサイズを求めてみましょう。
<sample program col030-03>
#include <stdio.h>
#define DATA 10
int main(void)
{
int a[DATA];
printf("a = %d\n", sizeof(a));
return 0;
}
|
<実行結果>
a = 40 続行するには何かキーを押してください・・・
※私の実行環境での結果です。
int型で要素数が10個の配列を用意しました。
sizeofを使って配列aのバイト数を調べたところ40バイトと表示されました。
私の環境では、int型1つは4バイトだったので、ちゃんと計算されていますね。
最後に構造体を見てみましょう。
<sample program col030-04>
#include <stdio.h>
typedef struct {
char a;
short b;
long c;
} Sample;
int main(void)
{
printf("Sample = %d\n", sizeof(Sample));
return 0;
}
|
<実行結果>
Sample = 8 続行するには何かキーを押してください・・・
※私の実行環境での結果です。
構造体のメンバ変数は、
char → 1バイト short → 2バイト long → 4バイト
で、合計7バイトなのですが、表示は8バイトです。
環境によっては、CPUが処理する単位に合わせて「勝手にサイズを変えます」。
自分では、7バイトのつもりでも実際は8バイトだったりしますので、自分で計算するのは危険です。
変数や配列、構造体のサイズを指定する場合は、必ずsizeofを使用してください。
ブラウザの戻るボタンで戻ってください。