sizeof是c/c++中的乙個操作符(operator),簡單的說其作用就是返回乙個物件或者型別所佔的記憶體位元組數。
常用型別的sizeof:也可以對乙個函式呼叫求值,其結果是函式返回型別的大小,函式並不會被呼叫,我們來看乙個完整的例子:
char foo()
int main()
c99標準規定,函式、不能確定型別的表示式以及位域(bit-field)成員不能被計算sizeof值,即下面這些寫法都是錯誤的:
sizeof(foo);//error
void foo2(){}
sizeof(foo2());//error
struct s
;sizeof(s.f1);//error
指標變數的sizeof:學過資料結構的你應該知道指標是乙個很重要的概念,它記錄了另乙個物件的位址。在32位計算機中,乙個指標變數的返回值通常是4(注意結果是以位元組為單位),在64位系統中指標變數的sizeof通常為8。
char*pc="abc";
int*pi;
string*ps;
char**ppc=&pc;
void(*pf)();//函式指標
sizeof(pc);//結果為4
sizeof(pi);//結果為4
sizeof(ps);//結果為4
sizeof(ppc);//結果為4
sizeof(pf);//結果為4
結構體的sizeof:
位元組對齊的細節和編譯器實現相關,所以在進行結構體計算時需要考慮,滿足三個準則:
1)結構體變數的首位址能夠被其最寬基本型別成員的大小所整除;
2)結構體每個成員相對於結構體首位址的偏移量(offset)都是成員大小的整數倍,如有需要編譯器會在成員之間加上填充位元組(internal padding);
3)結構體的總大小為結構體最寬基本型別成員大小的整數倍,如有需要編譯器會在最末乙個成員之後加上填充位元組(trailing padding)。
還有一點要注意,c++中「空結構體」(不含資料成員)的大小不為0,而是1。
如
struct st
sizeof(st); //sizeof(char) + sizeof(int) = 5 ,因為5不能被4整除,所以編譯器自動對齊擴充套件為最近的能被4整除的空間大小8
類的sizeof:乙個空類所佔空間為1,多重繼承的空類所佔空間還是1。虛繼承涉及到虛表(虛指標_vtble)。
class cfather
};class cson1: public cfather
};class cgradfather
;int main()
sizeof使用介紹
本文主要包括二個部分,第一部分重點介紹在vc中,怎麼樣採用sizeof來求結構的大小,以及容易出現的問題,並給出解決問題的方法,第二部分總結出vc中sizeof的主要用法。1 sizeof應用在結構上的情況 請看下面的結構 struct mystruct 對結構mystruct採用sizeof會出現...
sizeof 函式的使用
1.sizeof的使用 sizeof操作符以位元組形式給出了其運算元的儲存大小.sizeof操作符不能用於函式型別,不完全型別或位字段。不完全型別指具有未知儲存大小的資料型別,如未知儲存大小的陣列型別 未知內容的結構或聯合型別 void型別等。2.sizeof的結果 sizeof操作符的結果型別是s...
C語言 sizeof使用
筆試題一道 char a 問 sizeof a 的大小 分析陣列的含義 陣列裡面存放的是指向char型的指標,並且初始化這兩個指標,分別讓其指向 兩個字串常量,值得注意的是這兩個字串常量並不在棧中,而是在ro型資料。所以結果為8!c 6.0驗證如下 圖1 圖2如圖1中所示,可以發現陣列中存放的就是兩...