名稱空間
變體
操作

sizeof 運算子

來自 cppreference.com
< c‎ | 語言

查詢物件或型別的大小。

當需要知道物件的實際大小時使用。

目錄

[編輯] 語法

sizeof( 型別 ) (1)
sizeof 表示式 (2)

這兩種版本都返回 size_t 型別的值。

[編輯] 解釋

1) 返回 型別物件表示的大小(以位元組為單位)
2) 返回 表示式 的型別的物件表示的大小(以位元組為單位)。不應用隱式轉換到 表示式

[編輯] 注意

根據計算機架構,一個位元組可能由 8 位或更多位組成,確切的位數由 CHAR_BIT 提供。

sizeof(char)sizeof(signed char)sizeof(unsigned char) 總是返回 1

sizeof 不能用於函式型別、不完整型別(包括 void)或位域左值。

當應用於具有結構聯合型別的運算元時,結果是此類物件中的總位元組數,包括內部和尾隨填充。尾隨填充使得如果該物件是陣列的一個元素,則滿足該陣列的下一個元素的對齊要求,換句話說,sizeof(T) 返回 T[] 陣列中一個元素的大小。

如果 型別VLA 型別,並且更改其大小表示式的值不會影響 sizeof 的結果,則是否評估大小表示式是未指定的。

(C99 起)

除非 表示式 的型別是 VLA(C99 起)表示式 不會被評估,並且 sizeof 運算子可以在整數常量表達式中使用。

如果 表示式 的型別是變長陣列型別,則 表示式 會被評估,並且它所評估的陣列的大小會在執行時計算。

(C99 起)

陣列 a 中的元素數量(包括 VLA)(C99 起)可以透過表示式 sizeof a / sizeof a[0] 來確定。請注意,如果 a 具有指標型別(例如在陣列到指標轉換或函式引數型別調整之後),此表示式將簡單地將指標型別中的位元組數除以指向型別中的位元組數。

[編輯] 關鍵詞

sizeof

[編輯] 示例

示例輸出對應於具有 64 位指標和 32 位 int 的平臺

#include <stdio.h>
 
int main(void)
{
    short x;
    // type argument:
    printf("sizeof(float)          = %zu\n", sizeof(float));
    printf("sizeof(void(*)(void))  = %zu\n", sizeof(void(*)(void)));
    printf("sizeof(char[10])       = %zu\n", sizeof(char[10]));
//  printf("sizeof(void(void))     = %zu\n", sizeof(void(void))); // Error: function type
//  printf("sizeof(char[])         = %zu\n", sizeof(char[])); // Error: incomplete type
 
    // expression argument:
    printf("sizeof 'a'             = %zu\n", sizeof 'a'); // type of 'a' is int
//  printf("sizeof main            = %zu\n", sizeof main); // Error: Function type
    printf("sizeof &main           = %zu\n", sizeof &main);
    printf("sizeof \"hello\"         = %zu\n", sizeof "hello"); // type is char[6]
    printf("sizeof x               = %zu\n", sizeof x); // type of x is short
    printf("sizeof (x+1)           = %zu\n", sizeof(x + 1)); // type of x+1 is int
}

可能的輸出

sizeof(float)          = 4
sizeof(void(*)(void))  = 8
sizeof(char[10])       = 10
sizeof 'a'             = 4
sizeof &main           = 8
sizeof "hello"         = 6
sizeof x               = 2
sizeof (x+1)           = 4

[編輯] 參考

  • C23 標準 (ISO/IEC 9899:2024)
  • 6.5.3.4 sizeof 和 alignof 運算子 (p: 待定)
  • C17 標準 (ISO/IEC 9899:2018)
  • 6.5.3.4 sizeof 和 _Alignof 運算子 (p: 待定)
  • C11 標準 (ISO/IEC 9899:2011)
  • 6.5.3.4 sizeof 和 _Alignof 運算子 (p: 90-91)
  • C99 標準 (ISO/IEC 9899:1999)
  • 6.5.3.4 sizeof 運算子 (p: 80-81)
  • C89/C90 標準 (ISO/IEC 9899:1990)
  • 3.3.3.4 sizeof 運算子

[編輯] 另請參見

C++ 文件 關於 sizeof 運算子