sizeof是乙個操作符,返回一條表示式或乙個型別名字所佔的位元組數。返回值乙個常量表示式,型別為size_t。
size_t sizeof(type)
size_t sizeof expr
在sizeof的運算物件中解引用乙個無效指標仍然是一種安全的行為,因為指標實際上並沒有被真正使用,sizeof並不需要真的解引用指標也能知道它所指物件的型別。
sizeof對c++的所有內建型別求其所佔空間的大小:
環境:win7 64-bits, code::blocks 16.01, gun gcc compiler with c++11 iso standard
type
number of bytes
bool
1char
1wchar_t
2char16_t
2char32_t
4short
2int
4long
4long long
8float
4double
8long double
12std::string
41. sizeof對陣列
傳入陣列頭指標,返回每個元素所佔的位元組數乘以陣列的長度。
2. sizeof對c風格字串
傳入頭指標,返回的是字串長度加上末尾結束符』\0』的總長度。
c風格字串有兩種,一種是指標形式:const char* s = 「hello」; 將s傳入給sizeof,會認為s為乙個指標,返回的是指標所佔的位元組數。
另一種是陣列形式:const char c_str = 「hello」; 將頭指標c_str傳給sizeof,是按陣列形式的計算所佔位元組數,返回的是字串長度加上末尾結束符的總長度。
3. sizeof對指標
傳入任意型別的指標,返回值由計算機記憶體位址匯流排的寬度決定,32-bits的作業系統返回4,64-bits的作業系統返回8。
4. sizeof對結構體(類)
空的結構體(沒有任何成員),返回1,表示僅含佔位符;當要構造乙個結構體(類)物件時,首先找出所佔位元組數最長的資料成員,比如是設為x,然後根據所有成員的所佔位元組數的總和來計算,所申請的位元組數最少n個x就能儲存完所有資料,則實際物件所佔記憶體位元組數為n*x;並且資料成員儲存的順序是根據在結構體內宣告的順序來儲存的;對於含有虛函式的結構體(類),其額外包括乙個成員——指向虛函式表的虛表指標,在32位的機器上,佔4個位元組,在64位的機器上,佔8個位元組,同時也會根據其它資料成員補齊。另外,不考慮函式成員所佔的記憶體,函式成員會儲存在**區,而不是棧區,所以不考慮。
#include using5. sizeof對聯合體(union)std::cout;
using
std::cin;
using
std::endl;
structa;
structb;
structc};
intmain()
union在記憶體中儲存是層疊式的,各成員共享一段記憶體,因此返回的是所佔位元組數最長的成員的位元組數。例如最長的成員為double,其它無論還有多少個成員且任意小於double的型別,返回的值均為8。
6. sizeof對函式
sizeof對函式操作實際上是求其返回值型別所佔的位元組數。求值時必須完整地寫出函式呼叫的形式,但並不實際呼叫函式。
示例程式:
//strlen函式定義在標頭檔案cstring.h中,用於計算字串的長度,但空字元』\0』不計算在內。引數為c風格字串的頭指標,返回值是字串的長度,空字元不計算在內。計算原理是順著頭指標向後找,直到遇到空字元才停下來。注意,如果字元陣列沒有以空字元結尾,呼叫strlen()函式可能產生重大錯誤,因為會不斷向前找直到遇到空字元。例如:測試c++中的sizeof()
#include using
std::cout;
using
std::cin;
using
std::endl;
size_t getptrsize(
char*cptr)
struct
nomember
;struct
s_int_char
;struct
s_int_short
;struct
s_int_func
};struct
s_only_func
};//
聯合體
union my_u
; //
函式short
func_short()
float func_float(int a, int
b)int
main()
char ca = ; //示例程式:不以空字元結束
cout << strlen(ca) << endl; //
嚴重錯誤
#include #include測試輸出:intmain()
C 中的sizeof操作符
1.1.sizeof操作符 sizeof操作符用於獲得乙個表示式的型別的大小,表示式可以是乙個表示式 變數或型別,當sizeof後面是單個識別符號時,不需要括號。如果sizeof表示式作為整個表示式的一部分時最好使用括號,除非你很清楚各運算子的優選級。sizeof的優先順序是一元運算子中最低的,但高...
C 中的sizeof操作符
1.1.sizeof操作符 sizeof操作符用於獲得乙個表示式的型別的大小,表示式可以是乙個表示式 變數或型別,當sizeof後面是單個識別符號時,不需要括號。如果sizeof表示式作為整個表示式的一部分時最好使用括號,除非你很清楚各運算子的優選級。sizeof的優先順序是一元運算子中最低的,但高...
C 中的sizeof操作符
technorati 標籤 sizeof 1.1.sizeof操作符 sizeof操作符用於獲得乙個表示式的型別的大小,表示式可以是乙個表示式 變數或型別,當sizeof後面是單個識別符號時,不需要括號。如果sizeof表示式作為整個表示式的一部分時最好使用括號,除非你很清楚各運算子的優選級。siz...