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