sizeof使用介紹

2021-09-11 21:48:14 字數 1488 閱讀 6946

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中所示,可以發現陣列中存放的就是兩...