由以下幾個例子我們說明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是個操作符而不是個函數。