C 言語 | 構造体の宣言 | 型のサイズ - sizeof

値や定義した型のインスタンスを保存するために必要な領域のサイズを取得するには、sizeof 演算子を使用する。

値のサイズを取得する

すべての変数、構造体、共用体のインスタンスには、値を保存するためのメモリー領域が割り当てられる。たとえば、32 ビットコンピューターでは int 型に通常 4 バイトの領域が割り当てられる。現代のシステムではメモリー容量が増えたため、開発者が容量を強く意識する機会は減ったが、メモリーは依然として重要な要素である。

C 言語では sizeof 演算子を使い、変数や型のサイズを確認できる。sizeof 演算子は、指定した値に必要なバイト数を返す。返された整数値は、ポインター演算や構造体の処理などに利用できる。

sizeof 演算子

sizeof 式

この形式では、式で指定した値のサイズを取得する。式には通常、変数名などの識別子を指定する。

コード 1

#include <stdio.h>

int main() {
 char c;
 short si;
 int i;

  printf("char = %d : short = %d : int = %d\n" ,
   sizeof c , sizeof si , sizeof i
 );
  return 0;
}

コード 1 は、char 型の変数 cshort 型の変数 siint 型の変数 i のサイズを表示する。結果はシステムによって異なるが、char のサイズは必ず 1 になる。一般的な 32 ビットコンピューターでは、int は 4 バイト、short は 2 バイトになると考えられる。sizeof 演算子を使うと、利用中のシステムにおける正確なサイズを確認できる。

型のサイズを確認するためだけに、使用しない変数を作る必要はない。sizeof 演算子には、丸かっこで囲んだ型名も指定できる。

型を指定する sizeof 演算子

sizeof (型指定子)

基本型だけでなく、構造体型や typedef 名も指定できる。

コード 2

#include <stdio.h>

typedef struct { int x , y; } Point;
typedef union {
  char c;
 short si;
 int i;
} Value;

int main() {
  printf("Point = %d : Value = %d\n" , sizeof(Point) , sizeof(Value));
 return 0;
}

コード 2 では sizeof 演算子に型を指定している。これにより、Point 構造体と Value 共用体のバイト数を取得できる。Point のサイズは sizeof (int) * 2 に相当し、Value のサイズは最も大きいメンバーである int と同じになる。