sizeof
カテゴリ
説明
sizeof 演算子には、2 つの使い方があります。
sizeof unary-expression sizeof (type-name)
結果はいずれの場合も、演算子によって使用されるメモリ領域(バイト数)を示す整数定数です。これは演算子の型によって決まりますが、例外もあります。それぞれの型に対して予約される領域はマシンによって異なります。
最初の使用方法では演算子式を評価せずに式の型が決定されます。これには副作用はありません。演算子が char 型(signed または unsigned)の場合、sizeof の結果は 1 になります。演算子がパラメータではない配列型の場合、結果は配列全体のバイト数になります(配列名がポインタ型に変換されない)。配列内の要素の数は sizeof array / sizeof array[0]
で算出できます。
演算子が配列型または関数型として宣言されたパラメータである場合、sizeof はそのポインタのサイズを返します。sizeof が構造体および共用体に適用された場合は、パディングを含む合計バイト数が返されます。
関数型の式、または不完全型、そのような型のかっこ内の名前、ビット フィールド オブジェクトを指定する lvalue では、sizeof を使用できません。
sizeof の結果の整数型は size_t です。
sizeof はプリプロセッサ指令でも使用できます。これは C++Builder に固有の機能です。
C++ では、classtype
が基底クラスの派生クラスである場合、sizeof(classtype)
はオブジェクトのサイズを返します。このサイズには、基底クラスのサイズも含まれます。
例
/* USE THE sizeof OPERATOR TO GET SIZES OF DIFFERENT DATA TYPES. */ #include <stdio.h> struct st { char *name; int age; double height; }; struct st St_Array[]= { /* AN ARRAY OF structs */ { "Jr.", 4, 34.20 }, /* St_Array[0] */ { "Suzie", 23, 69.75 }, /* St_Array[1] */ }; int main() { long double LD_Array[] = { 1.3, 501.09, 0.0007, 90.1, 17.08 }; printf("\nNumber of elements in LD_Array = %d", sizeof(LD_Array) / sizeof(LD_Array[0])); /**** THE NUMBER OF ELEMENTS IN THE St_Array. ****/ printf("\nSt_Array has %d elements", sizeof(St_Array)/sizeof(St_Array[0])); /**** THE NUMBER OF BYTES IN EACH St_Array ELEMENT. ****/ printf("\nSt_Array[0] = %d", sizeof(St_Array[0])); /**** THE TOTAL NUMBER OF BYTES IN St_Array. ****/ printf("\nSt_Array=%d", sizeof(St_Array)); return 0; }
出力
Number of elements in LD_Array = 5 St_Array has 2 elements St_Array[0] = 16 St_Array= 32