C++ sizeof 操作符的用法總結

在VC中,sizeof有着許多的用法,而且很容易引起一些錯誤。下面根據sizeof後面的參數對sizeof的用法做個總結。


A.參數爲數據類型或者爲一般變量:

例如sizeof(int),sizeof(long)等等。

這種情況要注意的是不同系統系統或者不同編譯器得到的結果可能是不同的。

例如int類型在16位系統中佔2個字節,在32位系統中佔4個字節。


B.參數爲數組或指針:

int a[50]; //sizeof(a)=4*50=200;求數組所佔的空間大小

int *a=new int[50];// sizeof(a)=4; a爲一個指針,sizeof(a)是求指針的大小,在32位系統中,當然是佔4個字節。


C.參數爲結構或類:

Sizeof應用在類和結構的處理情況是相同的,需要考慮字節對齊(參加另一篇文章:C++自定義結構體和類 內存對齊。另外有幾點需要注意:

第一、結構或者類中的靜態成員不對結構或者類的大小產生影響,因爲靜態變量的存儲位置與結構或者類的實例地址無關。

第二、沒有成員變量的結構或類(非虛)的大小爲1,因爲必須保證結構或類的每一個實例在內存中都有唯一的地址。

第三、包含虛函數的類或者虛繼承的類,需要算上虛表指針的佔的4個字節。


下面舉例說明:

Class Test{int a;static double c};//sizeof(Test)=4.

Test *s;//sizeof(s)=4,s爲一個指針。

Class test1{ };//sizeof(test1)=1;

Class test2{ virtual void print(){}};//sizeof(test2)=4;


參考 http://blog.csdn.net/garfield2005/article/details/7648430




發佈了41 篇原創文章 · 獲贊 19 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章