sizeof 演算子
型 char のサイズに対するオペランドのサイズが出力されます。
注意
sizeof ... 演算子の詳細については、「楕円および可変値引数テンプレート」を参照してください。
sizeof unary-expression sizeof ( type-name )
解説
sizeof 演算子の結果は、インクルード ファイル STDDEF.H で定義されている整数型、size_t です。 この演算子を使うと、コンピューターに依存するデータ サイズをプログラムで指定せずに済みます。
sizeof のオペランドには、次のいずれかを指定できます。
型の名前。 sizeof を型名を指定して使用するには、名前をかっこで囲む必要があります。
任意の式を指定します。 式で使用する場合、sizeof はかっこ付きでもかっこなしでも指定できます。 式は評価されません。
sizeof 演算子を char 型のオブジェクトに適用すると、1 になります。 sizeof 演算子を配列に適用すると、配列識別子によって表されるポインターのサイズではなく、その配列の合計バイト数になります。 配列識別子によって表されるポインターのサイズを取得するには、sizeof を使用する関数にそれをパラメーターとして渡します。 次に例を示します。
使用例
#include <iostream>
using namespace std;
size_t getPtrSize( char *ptr )
{
return sizeof( ptr );
}
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 演算子を class、struct、または union 型に適用すると、結果はその型のオブジェクトのバイト数に、ワード境界にメンバーをアラインするために追加されたパディングを加えたものになります。 結果は、個々のメンバーのストレージ要件を追加することで計算されたサイズには必ずしも対応しません。 /Zp コンパイラ オプションおよび pack プラグマは、メンバーのアラインメント境界に影響します。
sizeof 演算子は、空のクラスの場合でも 0 を生成しません。
sizeof 演算子は、次のオペランドには使用できません。
関数 (ただし、関数へのポインターに sizeof を適用することはできます)。
ビット フィールド。
定義されていないクラス。
型 void。
動的に割り当てられる配列。
外部配列。
不完全な型。
かっこで囲まれた不完全な型の名前。
sizeof 演算子を参照に適用すると、結果は sizeof をオブジェクト自体に適用した場合と同じです。
可変長配列が構造の最後の要素である場合、sizeof 演算子は配列のない構造体のサイズを返します。
sizeof 演算子は、通常、次の形式の式を使用して配列の要素の数を計算するために使用されます。
sizeof array / sizeof array[0]