変数についてで説明したように、各変数にはサイズがあります。
しかし、変数のサイズは環境によって異なる可能性があるため、自分で勝手に設定することは危険です。
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を使用してください。
ブラウザの戻るボタンで戻ってください。