sizeof 演算子 (c)
sizeof の演算子はストレージの量をオペランドの型のオブジェクトを格納するために必要なバイト数で示します。この演算子はプログラム内のマシンに依存しないデータのサイズを指定するのを防ぐことができます。
sizeof unary-expression
sizeof ( type-name )
解説
単項式 のオペランドであるかまたはの型にキャスト式 (つまりかっこで囲まれた型指定子) 識別子です。 単項式は ビット フィールドのオブジェクト不完全な型または関数呼び出しを表すことはできません。結果は符号なしの整数定数です。標準ヘッダーは size_tSTDDEF.Hこの型を定義します。
配列識別子に sizeof の演算子を適用すると結果は配列識別子によって表されるポインターのサイズを避けて全体のサイズです。
構造体または共用体型の名前または構造体または共用体型の識別子に sizeof の演算子を適用すると結果は内部および末尾の埋め込みを含む構造体または共用体のバイト数です。このサイズはメモリの構造体または共用体のメンバーの配置に使用される内部および末尾の埋め込みなどがあります。したがって各メンバーのストレージ要件の上に追加することで計算されたサイズに対応しないことがあります。
可変長配列が構造の最後の要素である場合sizeof 演算子は配列の場合は構造体のサイズを返します。
buffer = calloc(100, sizeof (int) );
この例ではマシン間で異なる calloc という名前のランタイム関数の引数として int のサイズを渡すために sizeof の演算子を使用します。関数によって返される値はbuffer に格納されます。
static char *strings[] ={
"this is string one",
"this is string two",
"this is string three",
};
const int string_no = ( sizeof strings ) / ( sizeof strings[0] );
この例ではstrings は char へのポインターの配列です。ポインターの数は配列の要素数ですが指定されていません。配列の要素数を計算するために sizeof の演算子を使用してポインターの数を調べることができます。 定数 の整数値 string_no はこの値に初期化されます。これは 定数 の値であるためstring_no は変更できません。