將 sizeof 運算子 (C)
sizeof運算子提供存放數量,以位元組為單位,才能儲存運算元的型別的物件。 此運算子可讓您避免在程式中指定電腦相關的資料大小。
sizeof unary-expression
sizeof ( type-name )
備註
運算元是不論是哪一的識別項一元 (unary) 運算式,或型別轉型運算式 (也就是以括弧括住型別規範)。 一元 (unary) 運算式無法表示的位元欄位物件、 不完整的型別或函式指示項。 結果是不帶正負號的整數常數。 標準標頭 STDDEF。H 定義為這個型別 size_t。
當您套用sizeof的陣列識別項的運算子,結果就是整個陣列的大小,而不是由陣列識別碼指標的大小。
當您套用sizeof結構或等位型別的名稱或識別項的結構或等位型別的運算子,結果是在結構或等位,包括內部和後端的填補位元組數目。 這個大小可能包括內部和後端與邊框距離用來對齊結構或等位在記憶體的界限的成員。 因此,結果可能不會對應到計算加總的儲存需求的個別成員的大小。
如果將可變大小的陣列是一種結構,最後一個項目sizeof運算子會傳回結構,而陣列的大小。
buffer = calloc(100, sizeof (int) );
這個範例會使用sizeof改依名稱傳遞的大小int,而異的機器,做為具名的執行階段函式的引數calloc。 函數所傳回的值會儲存在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運算子來計算陣列中的項目數。 Const 的整數值string_no都會初始化為這個數字。 因為它是 const 的值, string_no無法修改。