sizeof與strlen的區別

2022-04-28 19:00:08 字數 1045 閱讀 6980

格式:strlen(字元陣列名)

功能:計算字串s的長度,不包括『\0'在內

char aa[10]="jun"; coutsizeof()返回的是變數宣告後所佔的記憶體數,不是實際長度,此外sizeof不是函式,僅僅是乙個操作符,strlen是函式。

區別:

1.sizeof的結果型別是size_t(也就是unsigned int型),該型別保證能容納所建立的最大物件的大小。

2.sizeof是操作符(關鍵字),strlen是函式。

3.sizeof可以用型別做引數,strlen只能用char*做引數,且必須是』\0『結尾的。

4.陣列做sizeof的引數不退化,傳遞給strlen就退化為指標了。

5.大部分編譯程式在編譯的時候就把sizeof計算過了是型別或是變數的長度。所以sizeof(x)可以用來定義陣列維數,strlen的結果要在執行的時候才能計算出來,是用來計算字串的長度,不是型別佔記憶體的大小。

6.sizeof後如果是型別必須加括號,如果是變數名可以不用加括號。

ps:對函式使用sizeof,在編譯階段會被函式返回值的型別取代。

問:乙個空類佔多少空間?多重繼承的空類呢?

分析: 空型別的例項中不包含任何資訊,所以sizeof本來應該為0,但是當宣告該型別的例項時,它必須在記憶體中占用一定空間,否則無法使用這些例項。至於具體占用多少,由編譯器決定。visual studio中每個空型別的例項占用一位元組的空間。因此無論是單一繼承,還是多重繼承,空類所佔空間都為1。

:如果在該型別(空型別)中新增乙個建構函式和乙個析構函式,再對它求sizeof,得到的結果又是多少?

問:那如果把析構函式標記為虛函式呢?

分析:c++編譯器一旦在某個型別中發現有虛函式,就會為該型別生成乙個虛函式表,並在該型別的每乙個例項中新增指向該虛函式表的指標。因此,在32為系統中,指標占用4位元組的記憶體,所以sizeof的值為4,而在64位系統中則為8.

sizeof求位元組以及與strlen的區別

例子一 根據以下條件進行計算 1 結構體的大小等於結構體內最大成員大小的整數倍 2 結構體內的成員的首位址相對於結構體首位址的偏移量是其型別大小的整數倍,比如說double型成員相對於結構體的首位址的位址 偏移量應該是8的倍數。include include using namespace std ...

C語言中的strlen與sizeof的區別

sizeof與strlen是有著本質的區別,sizeof是求資料型別所佔的空間大小,而strlen是求字串的長度,字串以 0結尾。區別如下 1 sizeof是乙個c語言中的乙個單目運算子,而strlen是乙個函式,用來計算字串的長度。2 sizeof求的是資料型別所佔空間的大小,而strlen是求字...

C語言中的strlen與sizeof的區別

sizeof與strlen是有著本質的區別,sizeof是求資料型別所佔的空間大小,而strlen是求字串的長度,字串以 0結尾。區別如下 1 sizeof是乙個c語言中的乙個單目運算子,而strlen是乙個函式,用來計算字串的長度。2 sizeof求的是資料型別所佔空間的大小,而strlen是求字...