?
This document uses PHP Chinese website manual Release
查詢對象或類型的大小。
在必須知道對象的實際大小時使用。
sizeof( type ) | (1) | |
---|---|---|
sizeof expression | (2) |
兩個版本都返回一個類型值size_t
。
1)返回類型的對象表示的大小(以字節(jié)為單位)
2)返回表達式類型的對象表示的大?。ㄒ宰止?jié)為單位)
根據(jù)計算機體系結(jié)構(gòu)的不同,一個字節(jié)可能由8個或更多位組成,確切的數(shù)字為CHAR_BIT
。
sizeof(char)
, sizeof(signed char)
, and sizeof(unsigned char)
always return 1
.
sizeof不能用于函數(shù)類型,不完整類型(包括void
)或位域左值。
當(dāng)應(yīng)用于具有結(jié)構(gòu)或聯(lián)合類型的操作數(shù)時,結(jié)果是此類對象中的總字節(jié)數(shù),包括內(nèi)部和尾部填充。尾部填充是這樣的:如果對象是數(shù)組的元素,則該數(shù)組的下一個元素的對齊要求將被滿足,換句話說,sizeof(T)返回T []數(shù)組的元素的大小。
除非表達式的類型是VLA,否則(因為C99)表達式不計算,sizeof
操作符可能用于整型常量表達式。
如果表達式的類型是可變長度數(shù)組類型,則計算expression并在運行時計算其計算的數(shù)組大小。 | (自C99以來) |
---|
任何陣列中的元素數(shù)量,a
包括VLA(自C99開始)可以用表達式確定sizeof a / sizeof a[0]
。請注意,如果a
具有指針類型(例如在函數(shù)參數(shù)類型調(diào)整的數(shù)組到指針轉(zhuǎn)換之后),則此表達式將簡單地將指針類型中的字節(jié)數(shù)除以指向類型中的字節(jié)數(shù)。
sizeof
.
采樣輸出對應(yīng)于具有64位指針和32位int的平臺。
#include <stdio.h> int main(void){ // 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]}
可能的輸出:
sizeof(float) = 4sizeof(void(*)(void)) = 8sizeof(char[10]) = 10sizeof 'a' = 4sizeof &main = 8sizeof "hello" = 6