sizeof 演算子

型 char のサイズに対してオペランドのサイズがあります。

sizeof unary-expression
sizeof ( type-name )

解説

sizeof の演算子の結果は型 size_t のインクルード ファイル STDDEF.H. で定義された整数型です。この演算子はプログラム内のマシンに依存しないデータのサイズを指定するのを防ぐことができます。

sizeof へのオペランドは次のいずれかです :

  • 型名。型名の sizeof を使用するには名前をかっこで囲む必要があります。

  • 任意の式を指定します。式を使用するとsizeof はかっこなしで指定できます。式は評価されません。

sizeof の演算子を型 char のオブジェクトに適用すると1. について説明します。sizeof の演算子を使って配列に適用するとその配列識別子によって表されるポインターのサイズではなく合計バイト数があります。配列識別子によって表されるポインターのサイズを取得するには sizeof を使用する関数にパラメーターとして渡します。次に例を示します。

使用例

// expre_sizeof_Operator.cpp
// compile with: /EHsc
#include <iostream>

size_t getPtrSize( char *ptr )
{
   return sizeof( ptr );
}

using namespace std;
int main()
{
   char szHello[] = "Hello, world!";

   cout  << "The size of a char is: "
         << sizeof( char )
         << "\nThe length of " << szHello << " is: "
         << sizeof szHello
         << "\nThe size of the pointer is "
         << getPtrSize( szHello ) << endl;
}

出力例

The size of a char is: 1
The length of Hello, world! is: 14
The size of the pointer is 4

sizeof の演算子が クラス structまたは 共用体 の型に適用すると結果はワード境界のメンバーを配置するために追加された埋め込みおよびその型のオブジェクトのバイト数です。結果は各メンバーのストレージ要件を追加することで計算されるサイズには対応しません。/Zp のコンパイラ オプションおよび パッケージ のプラグマはメンバーの境界配置に影響します。

sizeof の演算子は空の 0 はありません。

sizeof の演算子は次のオペランドには使用できません :

  • 関数。ただしsizeof は関数へのポインターに適用できます)。

  • ビット フィールド。

  • 未定義のクラス。

  • 型 void。

  • 動的に割り当てられた配列。

  • 外部配列。

  • 不完全な型。

  • 不完全な型のかっこで囲まれた名前。

sizeof の演算子は参照に適用すると結果は sizeof がオブジェクト自体に適用することと同じです。

可変長配列が構造の最後の要素である場合sizeof 演算子は配列の場合は構造体のサイズを返します。

sizeof の演算子は頻繁に使用される形式の式を使用して配列の要素数を計算する :

sizeof array / sizeof array[0]

参照

関連項目

単項演算子との式

C++ のキーワード