sizeof

提供: Appmethod Topics
移動先: 案内検索

キーワード(アルファベット順):インデックス への移動


カテゴリ

演算子

説明

sizeof 演算子には、2 つの使い方があります。

sizeof <単項式>
sizeof (<型名>)

結果はいずれの場合も、演算子によって使用されるメモリ容量(バイト数)を示す整数定数です。これは演算子の型によって決まりますが、例外もあります。それぞれの型に対して予約される容量はマシンによって異なります。

最初の使用方法では演算子式を評価せずに式の型が決定されます。これには副作用はありません。演算子が char 型(signed または unsigned)の場合、sizeof の結果は 1 になります。演算子がパラメータではない配列型の場合、結果は配列全体のバイト数になります(配列名がポインタ型に変換されない)。配列内の要素の数は sizeof array / sizeof array[0] で算出できます。

演算子が配列型または関数型として宣言されたパラメータである場合、sizeof はそのポインタのサイズを返します。sizeof が構造体および共用体に適用された場合は、パディングを含む合計バイト数が返されます。

関数型の式、または不完全型、そのような型のかっこ内の名前、ビット フィールド オブジェクトを指定する lvalue では、sizeof を使用できません。

sizeof の結果の整数型は size_t です。

sizeof はプリプロセッサ指令でも使用できます。これは、CodeGear C++ の固有の機能です。

C++ では、classtype が基底クラスの派生クラスである場合、sizeof(classtype) はオブジェクトのサイズを返します。このサイズには、基底クラスのサイズも含まれます。

例:

 /*  sizeof 演算子を使用して、さまざまなデータ型のサイズを取得します。*/
 #include <stdio.h>
 struct st {
   char *name;
    int age;
    double height;
 };
 struct st St_Array[]= {  /* 構造体の配列 */
    { "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]));
       /****  St_Array の要素数 ****/
       printf("\nSt_Array has %d elements",
       sizeof(St_Array)/sizeof(St_Array[0]));
       /****  St_Array に含まれる各要素のサイズ(バイト単位)  ****/
       printf("\nSt_Array[0] = %d",
       sizeof(St_Array[0]));
       /****  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