sizeof 演算子
オブジェクトまたは型のサイズを問い合わせます。
オブジェクトの実際のサイズを知る必要がある場合に使用されます。
目次 |
[編集] 構文
sizeof( 型 ) |
(1) | ||||||||
sizeof 式 |
(2) | ||||||||
どちらのバージョンも size_t 型の値を返します。
[編集] 説明
[編集] 注意
コンピュータアーキテクチャによっては、バイトは8ビット以上で構成される場合があり、その正確な数は CHAR_BIT として提供されます。
sizeof(char)、sizeof(signed char)、および sizeof(unsigned char) は常に 1 を返します。
sizeof は、関数型、不完全型(void を含む)、または ビットフィールドの左辺値には使用できません。
構造体型または共用体型のオペランドに適用される場合、その結果は、内部パディングおよび末尾パディングを含む、そのようなオブジェクトの合計バイト数になります。末尾パディングは、オブジェクトが配列の要素であった場合に、この配列の次の要素のアライメント要件が満たされるようなものであり、言い換えると、sizeof(T) は T[] 配列の要素のサイズを返します。
|
もし 型が VLA 型であり、そのサイズ式の値の変更が `sizeof` の結果に影響しない場合、サイズ式が評価されるかどうかの不確定です。 |
(C99以降) |
式の型が VLA である場合を除き(C99 以降)、式は評価されず、`sizeof` 演算子は整数 定数式で使用できます。
|
式の型が可変長配列型の場合、式は評価され、それが評価する配列のサイズは実行時に計算されます。 |
(C99以降) |
a という名前の任意の配列(VLA を含む)の要素数は、式 sizeof a / sizeof a[0] で決定できます。なお、a がポインター型(関数パラメーター型調整の配列からポインターへの変換後など)の場合、この式は単にポインター型のバイト数を使用された型(pointed type)のバイト数で割ることになります。
[編集] キーワード
[編集] 例
サンプル出力は、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 The sizeof and alignof operators (p: TBD)
- C17標準 (ISO/IEC 9899:2018)
- 6.5.3.4 The sizeof and _Alignof operators (p: TBD)
- C11標準 (ISO/IEC 9899:2011)
- 6.5.3.4 sizeofおよび_Alignof演算子 (p: 90-91)
- C99標準 (ISO/IEC 9899:1999)
- 6.5.3.4 The sizeof operator (p: 80-81)
- C89/C90標準 (ISO/IEC 9899:1990)
- 3.3.3.4 The sizeof operator
[編集] 関連項目
| C++ ドキュメント (
sizeof operator) |