在vc中,sizeof有著許多的用法,而且很容易引起一些錯誤。下面根據sizeof後面的引數對sizeof的用法做個總結。
a.引數為資料型別或者為一般變數。例如sizeof(int),sizeof(long)等等。這種情況要注意的是不同系統系統或者不同編譯器得到的結果可能是不同的。例如int型別在16位系統中佔2個位元組,在32位系統中佔4個位元組。
b. 引數為陣列或指標。下面舉例說明.
int dest[50]; //sizeof(dest)=4*50=200; 求陣列所佔的空間大小
int *pstr=new int[50];// sizeof(pstr)=4; pstr為乙個指標,sizeof(pstr)是求指標
//的大小,在32位系統中,當然是佔4個位元組。
c.引數為陣列引用。下面舉例說明
int func(char (&s)[5]);
;//sizeof(test)=4.
test *ps;//sizeof(ps)=4,ps為乙個指標。
class test1;//sizeof(test1)=1;
e.引數為其他。下面舉例說明。
int func(char s[5]);
cout//以sizeof(s)實際上為求指標的大小。
return 1;
補充:1.
#include
using namespace std;
int func(char s[5])
sizeof(func(「1234」))=4//因為func的返回型別為int,所以相當於
//求sizeof(int).
以上為sizeof的基本用法,在實際的使用中要注意分析vc的分配變數的分配策略,這樣的話可以避免一些錯誤
2.對於ctest這個類,在32位機器、4位元組對齊的情況下,sizeof(ctest)= ?
class ctest
a、4 b、8 c、12 d、16
是8。乙個m_itime的大小為4,再加上由於虛函式產生的指標陣列大小也為4,所以加起來是8
"int m_itime"是定義乙個整形變數,而int型變數在4位元組對齊的環境中是佔4個位元組。「4位元組對齊」的意思就是指在改環境中定義的變數肯定能被4整除。而為什麼是8,本塊中有相關解釋,我這裡再羅嗦一遍,呵呵,當類中定義有虛函式時,編譯程式會自動向類中增加乙個指向函式指標表的指標,m_itime佔4個位元組,指標也佔4個位元組,加起來就是8個了 。
sizeof用法總結
在vc中,sizeof有著許多的用法,而且很容易引起一些錯誤。下面根據sizeof後面的 引數對sizeof的用法做個總結。a 引數為資料型別或者為一般變數。例如sizeof int sizeof long 等等。這種情 況要注意的是不同系統系統或者不同編譯器得到的結果可能是不同的。例如int型別在...
sizeof 用法總結
sizeof 功能 計算資料空間的位元組數 1.與strlen 比較 strlen 計算字元陣列的字元數,以 0 為結束判斷。而sizeof計算資料 包括陣列 變數 型別 結構體等 所佔記憶體空間,用位元組數表示 2.指標與靜態陣列的sizeof操作 指標均可看為變數型別的一種。所有指標變數的siz...
sizeof用法總結
sizeof用法總結 以下執行環境都是一般的,在32位編譯環境中 1,基本資料型別的sizeof cout 再看示例 pragma pack push 將當前pack設定壓棧儲存 pragma pack 2 必須在結構體定義之前使用 struct s1 struct s3 pragma pack p...