解析C语言中的sizeof
生活随笔
收集整理的這篇文章主要介紹了
解析C语言中的sizeof
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?
一、sizeof的概念?sizeof是C語言的一種單目操作符,如C語言的其他操作符++、--等。它并不是函數(shù)。sizeof操作符以字節(jié)形式給出了其操作數(shù)的存儲(chǔ)大小。操作數(shù)可以是一個(gè)表達(dá)式或括在括號(hào)內(nèi)的類型名。操作數(shù)的存儲(chǔ)大小由操作數(shù)的類型決定。?
二、sizeof的使用方法?
1、用于數(shù)據(jù)類型?
sizeof使用形式:sizeof(type)?
數(shù)據(jù)類型必須用括號(hào)括住。如sizeof(int)。?
2、用于變量?
sizeof使用形式:sizeof(var_name)或sizeof?var_name?
變量名可以不用括號(hào)括住。如sizeof?(var_name),sizeof?var_name等都是正確形式。帶括號(hào)的用法更普遍,大多數(shù)程序員采用這種形式。?
注意:sizeof操作符不能用于函數(shù)類型,不完全類型或位字段。不完全類型指具有未知存儲(chǔ)大小的數(shù)據(jù)類型,如未知存儲(chǔ)大小的數(shù)組類型、未知內(nèi)容的結(jié)構(gòu)或聯(lián)合類型、void類型等。?
如sizeof(max)若此時(shí)變量max定義為int?max(),sizeof(char_v)?若此時(shí)char_v定義為char?char_v?[MAX]且MAX未知,sizeof(void)都不是正確形式。?
三、sizeof的結(jié)果?
sizeof操作符的結(jié)果類型是size_t,它在頭文件<stddef.h>中typedef為unsigned?int類型。該類型保證能容納實(shí)現(xiàn)所建立的最大對象的字節(jié)大小。?
1、若操作數(shù)具有類型char、unsigned?char或signed?char,其結(jié)果等于1。?
ANSI?C正式規(guī)定字符類型為1字節(jié)。?
2、int、unsigned?int?、short?int、unsigned?short?、long?int?、unsigned?long?、float、double、long?double類型的sizeof?在ANSI?C中沒有具體規(guī)定,大小依賴于實(shí)現(xiàn),一般可能分別為2、2、2、2、4、4、4、8、10。?
3、當(dāng)操作數(shù)是指針時(shí),sizeof依賴于編譯器。例如Microsoft?C/C++7.0中,near類指針字節(jié)數(shù)為2,far、huge類指針字節(jié)數(shù)為4。一般Unix的指針字節(jié)數(shù)為4。?
4、當(dāng)操作數(shù)具有數(shù)組類型時(shí),其結(jié)果是數(shù)組的總字節(jié)數(shù)。?
5、聯(lián)合類型操作數(shù)的sizeof是其最大字節(jié)成員的字節(jié)數(shù)。結(jié)構(gòu)類型操作數(shù)的sizeof是這種類型對象的總字節(jié)數(shù),包括任何墊補(bǔ)在內(nèi)。?
讓我們看如下結(jié)構(gòu):?
struct?{char?b;?double?x;}?a;?
在某些機(jī)器上sizeof(a)=12,而一般sizeof(char)+?sizeof(double)=9。?
這是因?yàn)榫幾g器在考慮對齊問題時(shí),在結(jié)構(gòu)中插入空位以控制各成員對象的地址對齊。如double類型的結(jié)構(gòu)成員x要放在被4整除的地址。?
6、如果操作數(shù)是函數(shù)中的數(shù)組形參或函數(shù)類型的形參,sizeof給出其指針的大小。?
四、sizeof與其他操作符的關(guān)系?
sizeof的優(yōu)先級(jí)為2級(jí),比/、%等3級(jí)運(yùn)算符優(yōu)先級(jí)高。它可以與其他操作符一起組成表達(dá)式。如i*sizeof(int);其中i為int類型變量。?
五、sizeof的主要用途?
1、sizeof操作符的一個(gè)主要用途是與存儲(chǔ)分配和I/O系統(tǒng)那樣的例程進(jìn)行通信。例如:?
void?*malloc(size_t?size),?
size_t?fread(void?*?ptr,size_t?size,size_t?nmemb,FILE?*?stream)。?
2、sizeof的另一個(gè)的主要用途是計(jì)算數(shù)組中元素的個(gè)數(shù)。例如:?
void?*?memset(void?*?s,int?c,sizeof(s))。?
六、建議?
由于操作數(shù)的字節(jié)數(shù)在實(shí)現(xiàn)時(shí)可能出現(xiàn)變化,建議在涉及到操作數(shù)字節(jié)大小時(shí)用ziseof來代替常量計(jì)算。
總結(jié)
以上是生活随笔為你收集整理的解析C语言中的sizeof的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntn删除软件
- 下一篇: typedef的四个用途和两大陷阱