sizeof基礎(chǔ)
在C語言中,sizeof是一個(gè)操作符(operator),而不是函數(shù)!其用于判斷數(shù)據(jù)類型或者表達(dá)式長度(所占的內(nèi)存字節(jié)數(shù))。其有兩種表達(dá)形式:
(1)sizeof(類型說明符)
(2)sizeof 表達(dá)式
我們通常使用第(1)種形式。
其返回值類型為size_t,在頭文件stddef.h中定義。這是一個(gè)依賴于編譯系統(tǒng)的值,一般定義為:
typedef unsigned int size_t;
首先確定我們當(dāng)前編譯環(huán)境中C語言各個(gè)基本數(shù)據(jù)類型在內(nèi)存中所占字節(jié)數(shù),我這里是32bit編譯環(huán)境:
我們這里的輸出結(jié)果為:
sizeof典型問題
sizeof看起來似乎很簡單,那來看看下面這段代碼,你能做對幾個(gè):
實(shí)際運(yùn)行 輸出結(jié)果為:
簡要分析:
(1)sizeof(char) 的值為1。因?yàn)閏har類型數(shù)據(jù)在內(nèi)存中占1字節(jié)。
(2)sizeof(char*)的值為4。因?yàn)閏har*代表一個(gè)指針,在32bit環(huán)境中為4字節(jié),也即unsigned int的字節(jié)長度。
(3)sizeof('a')的值為4。因?yàn)榇颂帯產(chǎn)’是獨(dú)立存在的一個(gè)字符(沒有賦值給其它變量),實(shí)際上就是一個(gè)整型數(shù),占4個(gè)字節(jié),即此處‘a(chǎn)’對應(yīng)的ascii碼的十進(jìn)制為整數(shù)97。但是需要注意的是,若有如下定義:
char ch = 'a';
則此處ch的字節(jié)數(shù)sizeof(ch)的值為1,而不是4。
(4)sizeof(*s+0)的值為4,因?yàn)?#39;h'+0 轉(zhuǎn)化為int,占4字節(jié)。此處涉及到類型轉(zhuǎn)換的問題。即不同類型的數(shù)據(jù)進(jìn)行運(yùn)算時(shí),會首先轉(zhuǎn)換成相同數(shù)據(jù)類型。轉(zhuǎn)換規(guī)則為(圖片來源于網(wǎng)絡(luò)):
(5)sizeof(*s)的值為1,因?yàn)榇颂?s為字符串s的第1個(gè)字符‘h’(注意與第三點(diǎn)區(qū)分開來,這里是有用char來修飾的),所以所占字節(jié)長度為1。
(6)sizeof(s)的值為4,同(2),此處s是一個(gè)指針,在32bit環(huán)境中為4字節(jié),也即unsigned int的字節(jié)長度。
-
內(nèi)存
+關(guān)注
關(guān)注
8文章
3002瀏覽量
73887 -
C語言
+關(guān)注
關(guān)注
180文章
7598瀏覽量
136211
發(fā)布評論請先 登錄
相關(guān)推薦
評論