C 中sizeof操作符與strlen函式

2022-09-04 06:30:10 字數 2658 閱讀 1811

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 using

std::cout;

using

std::cin;

using

std::endl;

structa;

structb;

structc};

intmain()

5. sizeof對聯合體(union)

union在記憶體中儲存是層疊式的,各成員共享一段記憶體,因此返回的是所佔位元組數最長的成員的位元組數。例如最長的成員為double,其它無論還有多少個成員且任意小於double的型別,返回的值均為8。

6. sizeof對函式

sizeof對函式操作實際上是求其返回值型別所佔的位元組數。求值時必須完整地寫出函式呼叫的形式,但並不實際呼叫函式。

示例程式:

//

測試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()

strlen函式定義在標頭檔案cstring.h中,用於計算字串的長度,但空字元』\0』不計算在內。引數為c風格字串的頭指標,返回值是字串的長度,空字元不計算在內。計算原理是順著頭指標向後找,直到遇到空字元才停下來。注意,如果字元陣列沒有以空字元結尾,呼叫strlen()函式可能產生重大錯誤,因為會不斷向前找直到遇到空字元。例如:

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...