sizeof 運算子

就類型 char 的大小而言,會產生其運算元的大小。

注意

如需有關 sizeof ... 運算子的資訊,請參閱省略符號和變可變參數範本

語法

sizeof unary-expression
sizeof ( type-name )

備註

sizeof 運算子的結果是 size_t 類型,這是 Include 檔 <stddef.h> 中定義的整數類資料類型。 這個運算子可以避免在您的程式中指定與電腦相關的資料大小。

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 運算子套用至 classstructunion 類型時,結果是該類型物件中的位元組數,加上為了讓成員對齊字邊界而加入的任何填補位元組。 在加上個別成員的儲存需求之後,其結果不一定會對應計算的大小。 /Zp 編譯器選項和 pack pragma 會影響成員的對齊邊界。

sizeof 運算子絕不會產生 0,即使用於空類別也一樣。

sizeof 運算子不能與下列運算元搭配使用:

  • 函數。 (不過,sizeof 可套用於函式的指標。)

  • 位元欄位。

  • 未定義的類別。

  • void 類型。

  • 以動態方式配置的陣列。

  • 外部陣列。

  • 不完整的類型。

  • 以括號括住的不完整類型名稱。

sizeof 運算子套用至參考時,結果相同,就像 sizeof 套用至物件本身一樣。

如果可變大小的陣列是結構的最後一個項目,sizeof 運算子會傳回不含陣列的結構大小。

sizeof 運算子經常用來計算陣列中的元素數目,所使用的運算式格式如下:

sizeof array / sizeof array[0]

另請參閱

具有一元運算子的運算式
關鍵字