sizeof operator
オブジェクトまたは型のサイズを問い合わせます。
オブジェクトの実際のサイズを知る必要がある場合に使用されます。
目次 |
構文
sizeof(
型
)
|
(1) | ||||||||
sizeof
式
|
(2) | ||||||||
両方のバージョンは型 size_t の値を返します。
説明
注記
コンピュータアーキテクチャに依存して、 byte は8ビット以上で構成される場合があり、正確な数値は CHAR_BIT で提供されます。
sizeof ( char ) 、 sizeof ( signed char ) および sizeof ( unsigned char ) は常に 1 を返します。
sizeofは関数型、不完全型( void を含む)、または bit-field 左辺値には使用できません。
構造体または共用体型のオペランドに適用された場合、結果はそのようなオブジェクトの総バイト数であり、内部パディングと末尾パディングを含みます。末尾パディングは、そのオブジェクトが配列の要素である場合に、この配列の次の要素のアライメント要件が満たされるように設定されます。言い換えれば、 sizeof ( T ) は T [ ] 配列の要素のサイズを返します。
|
type
が
VLA
型であり、そのサイズ式の値を変更しても
|
(C99以降) |
expression
の型が
VLA
でない限り、
(C99以降)
expression
は評価されず、
sizeof
演算子は整数
定数式
内で使用できます。
|
expression の型が 可変長配列 型の場合、 expression が評価され、その評価結果の配列のサイズが実行時に計算されます。 |
(C99以降) |
任意の 配列 a (VLAを含む) (C99以降) の要素数は、式 sizeof a / sizeof a [ 0 ] で求められます。 a がポインタ型を持つ場合(配列からポインタへの変換や関数パラメータ型の調整後など)、この式は単にポインタ型のバイト数を指し示す型のバイト数で除算することに注意してください。
キーワード
例
サンプル出力は、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
|
タグ内のテキストは翻訳せず保持
- 「for」はそのまま保持(文脈上、英語のままが適切)
- 「operator」はC++用語として翻訳せず保持
- 元のフォーマットと構造を完全に維持