?
このドキュメントでは、 php中國(guó)語(yǔ)ネットマニュアル リリース
查詢(xún)對(duì)象或類(lèi)型的大小。
在必須知道對(duì)象的實(shí)際大小時(shí)使用。
sizeof( type ) | (1) | |
---|---|---|
sizeof expression | (2) |
兩個(gè)版本都返回一個(gè)類(lèi)型值size_t
。
1)返回類(lèi)型的對(duì)象表示的大小(以字節(jié)為單位)
2)返回表達(dá)式類(lèi)型的對(duì)象表示的大?。ㄒ宰止?jié)為單位)
根據(jù)計(jì)算機(jī)體系結(jié)構(gòu)的不同,一個(gè)字節(jié)可能由8個(gè)或更多位組成,確切的數(shù)字為CHAR_BIT
。
sizeof(char)
, sizeof(signed char)
, and sizeof(unsigned char)
always return 1
.
sizeof不能用于函數(shù)類(lèi)型,不完整類(lèi)型(包括void
)或位域左值。
當(dāng)應(yīng)用于具有結(jié)構(gòu)或聯(lián)合類(lèi)型的操作數(shù)時(shí),結(jié)果是此類(lèi)對(duì)象中的總字節(jié)數(shù),包括內(nèi)部和尾部填充。尾部填充是這樣的:如果對(duì)象是數(shù)組的元素,則該數(shù)組的下一個(gè)元素的對(duì)齊要求將被滿(mǎn)足,換句話(huà)說(shuō),sizeof(T)返回T []數(shù)組的元素的大小。
除非表達(dá)式的類(lèi)型是VLA,否則(因?yàn)镃99)表達(dá)式不計(jì)算,sizeof
操作符可能用于整型常量表達(dá)式。
如果表達(dá)式的類(lèi)型是可變長(zhǎng)度數(shù)組類(lèi)型,則計(jì)算expression并在運(yùn)行時(shí)計(jì)算其計(jì)算的數(shù)組大小。 | (自C99以來(lái)) |
---|
任何陣列中的元素?cái)?shù)量,a
包括VLA(自C99開(kāi)始)可以用表達(dá)式確定sizeof a / sizeof a[0]
。請(qǐng)注意,如果a
具有指針類(lèi)型(例如在函數(shù)參數(shù)類(lèi)型調(diào)整的數(shù)組到指針轉(zhuǎn)換之后),則此表達(dá)式將簡(jiǎn)單地將指針類(lèi)型中的字節(jié)數(shù)除以指向類(lèi)型中的字節(jié)數(shù)。
sizeof
.
采樣輸出對(duì)應(yīng)于具有64位指針和32位int的平臺(tái)。
#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