VC++ sizeof和strlen之間的區別

由以下幾個例子我們說明sizeof和strlen之間的區別。

第一個例子:

char* ss = "0123456789";

sizeof(ss) 結果爲4,ss是指向字符串常量的字符指針

sizeof(*ss)結果爲1,*ss是第一個字符。

第二個例子:

char ss[] = "0123456789";

sizeof(ss)結果爲11,ss是數組,計算到“\0”位置,因此是(10+1)

sizeof(*ss)結果爲1,*ss是第一個字符。

第三個例子:

char ss[100] = "0123456789";

sizeof(ss)結果爲100,ss表示在內存中預分配的大小,100x1

strlen(ss)結果爲10,它內部實現是一個循環計算字符串的長度,直到“\0”爲止。

第四個例子:

int ss[100] = "0123456789";

sizeof(ss)結果爲400,ss表示在內存中的大小,100x4

strlen(ss)錯誤,strlen的參數只能是char*,且必須是以“\0”結尾的


通過上面四個例子對sizeof和strlen的深入瞭解,得出兩者的區別如下:

(1)sizeof是運算符,strlen是函數

(2)sizeof可以用類型做參數,strlen只能用char*做參數,且必須是以“\0”結尾的。

(3)用sizeof可以查看某種類型的對象在內存中所佔的單元字節,即系統分配了多少內存給它。

(4)strlen的結果在運行的時候才能計算出來,用來計算字符串的長度,而不是類型佔內存的多少。

(5)數組做sizeof的參數不退化,傳遞給strlen就退化爲指針

(6)sizeof後如果是類型必須加括號,如果是變量名可以不加括號。這是因爲sizeof是個操作符而不是個函數。








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