★変数などのサイズについて★


変数についてで説明したように、各変数にはサイズがあります。

しかし、変数のサイズは環境によって異なる可能性があるため、自分で勝手に設定することは危険です。

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を使用してください。


ブラウザの戻るボタンで戻ってください。