Namespaces
Variants

sizeof operator

From cppreference.net

オブジェクトまたは型のサイズを問い合わせます。

オブジェクトの実際のサイズを知る必要がある場合に使用されます。

目次

構文

sizeof( ) (1)
sizeof (2)

両方のバージョンは型 size_t の値を返します。

説明

1) type オブジェクト表現 のサイズをバイト単位で返す
2) 型のオブジェクト表現のサイズをバイト単位で返します。 expression に対して暗黙的な変換は適用されません。

注記

コンピュータアーキテクチャに依存して、 byte は8ビット以上で構成される場合があり、正確な数値は CHAR_BIT で提供されます。

sizeof ( char ) sizeof ( signed char ) および sizeof ( unsigned char ) は常に 1 を返します。

sizeofは関数型、不完全型( void を含む)、または bit-field 左辺値には使用できません。

構造体または共用体型のオペランドに適用された場合、結果はそのようなオブジェクトの総バイト数であり、内部パディングと末尾パディングを含みます。末尾パディングは、そのオブジェクトが配列の要素である場合に、この配列の次の要素のアライメント要件が満たされるように設定されます。言い換えれば、 sizeof ( T ) T [ ] 配列の要素のサイズを返します。

type VLA 型であり、そのサイズ式の値を変更しても sizeof の結果に影響を与えない場合、 サイズ式が評価されるかどうかは未規定である。

(C99以降)

expression の型が VLA でない限り、 (C99以降) expression は評価されず、 sizeof 演算子は整数 定数式 内で使用できます。

expression の型が 可変長配列 型の場合、 expression が評価され、その評価結果の配列のサイズが実行時に計算されます。

(C99以降)

任意の 配列 a (VLAを含む) (C99以降) の要素数は、式 sizeof a / sizeof a [ 0 ] で求められます。 a がポインタ型を持つ場合(配列からポインタへの変換や関数パラメータ型の調整後など)、この式は単にポインタ型のバイト数を指し示す型のバイト数で除算することに注意してください。

キーワード

sizeof

サンプル出力は、64ビットポインタと32ビットintを持つプラットフォームに対応しています

#include <stdio.h>
int main(void)
{
    short x;
    // type argument:
    printf("sizeof(float)          = %zu\n", sizeof(float));
    printf("sizeof(void(*)(void))  = %zu\n", sizeof(void(*)(void)));
    printf("sizeof(char[10])       = %zu\n", sizeof(char[10]));
//  printf("sizeof(void(void))     = %zu\n", sizeof(void(void))); // Error: function type
//  printf("sizeof(char[])         = %zu\n", sizeof(char[])); // Error: incomplete type
    // expression argument:
    printf("sizeof 'a'             = %zu\n", sizeof 'a'); // type of 'a' is int
//  printf("sizeof main            = %zu\n", sizeof main); // Error: Function type
    printf("sizeof &main           = %zu\n", sizeof &main);
    printf("sizeof \"hello\"         = %zu\n", sizeof "hello"); // type is char[6]
    printf("sizeof x               = %zu\n", sizeof x); // type of x is short
    printf("sizeof (x+1)           = %zu\n", sizeof(x + 1)); // type of x+1 is int
}

出力例:

sizeof(float)          = 4
sizeof(void(*)(void))  = 8
sizeof(char[10])       = 10
sizeof 'a'             = 4
sizeof &main           = 8
sizeof "hello"         = 6
sizeof x               = 2
sizeof (x+1)           = 4

参考文献

  • C23規格 (ISO/IEC 9899:2024):
  • 6.5.3.4 sizeofおよびalignof演算子 (p: 未定)
  • C17規格 (ISO/IEC 9899:2018):
  • 6.5.3.4 sizeofおよび_Alignof演算子 (p: 未定)
  • C11規格 (ISO/IEC 9899:2011):
  • 6.5.3.4 sizeofおよび_Alignof演算子 (p: 90-91)
  • C99規格 (ISO/IEC 9899:1999):
  • 6.5.3.4 sizeof演算子 (p: 80-81)
  • C89/C90標準 (ISO/IEC 9899:1990):
  • 3.3.3.4 sizeof演算子

関連項目

C++ ドキュメント for sizeof operator
翻訳のポイント: - 「C++ documentation」→「C++ ドキュメント」 - HTMLタグ、属性、 タグ内のテキストは翻訳せず保持 - 「for」はそのまま保持(文脈上、英語のままが適切) - 「operator」はC++用語として翻訳せず保持 - 元のフォーマットと構造を完全に維持