您好,登錄后才能下訂單哦!
這篇文章的內容主要圍繞如何進行sizeof和strlen解析進行講述,文章內容清晰易懂,條理清晰,非常適合新手學習,值得大家去閱讀。感興趣的朋友可以跟隨小編一起閱讀吧。希望大家通過這篇文章有所收獲!
1.strlen函數.
strlen所作的僅僅是一個計數器的工作,它從內存的某個位置(可以是字符串開頭,中間某個位置,甚至是某個不確定的內存區域)開始掃描,直到碰到第一個字符串結束符 '\0'為止,然后返回計數器值。
2.sizeof操作符
sizeof()返回的是變量聲明后所占的內存數,不是實際長度,此外sizeof不是函數,僅僅是一個操作符。
3.strlen和sizeof的區別
3.1 sizeof可以用類型做參數,strlen只能用char*做參數,且必須是以''\0''結尾的。
3.2 sizeof還可以用函數做參數,比如:short f(); printf("%d\n", sizeof(f()));輸出的結果是sizeof(short),即2。
3.3 數組做sizeof的參數不退化,傳遞給strlen就退化為指針了。
3.4 大部分編譯程序在編譯的時候就把sizeof計算過了是類型或是變量的長度這就是sizeof(x)可以用來定義數組維數的原因。
3.5 strlen的結果要在運行的時候才能計算出來,是用來計算字符串的長度,不是類型占內存的大小。
3.6 sizeof后如果是類型必須加括弧,如果是變量名可以不加括弧。這是因為sizeof是個操作符不是個函數。
4.舉例區別strlen和sizeof
1.char str[20]="0123456789";
int a=strlen(str); //a=10; >>>> strlen 計算字符串的長度,以結束符 0x00 為字符串結束。
int b=sizeof(str); //而b=20; >>>> sizeof 計算的則是分配的數組 str[20] 所占的內存空間的大小,不受里面存儲的內容改變。
2.上面是對靜態數組處理的結果,如果是對指針,結果就不一樣了
char* ss = "0123456789";
sizeof(ss) 結果 4 ===》ss是指向字符串常量的字符指針,sizeof 獲得的是一個指針的之所占的空間,應該是長整型的,所以是4
而sizeof(*ss) 結果 1 ===》*ss是第一個字符,其實就是獲得了字符串的第一位'0' 所占的內存空間,是char類型的,占了 1位
strlen(ss)= 10 >>>> 如果要獲得這個字符串的長度,則一定要使用 strlen。 sizeof返回對象所占用的字節大小. strlen返回字符個數。
3.在使用sizeof時,有一個很特別的情況,就是數組名到指針蛻變,
char Array[3] = {'0'};
sizeof(Array) == 3;
char *p = Array;
strlen(p) == 1;//sizeof(p)結果為4
在傳遞一個數組名到一個函數中時,它會完全退化為一個指針
4. 內存補齊
class X
{
int i;
int j;
char k;
};
X x;
cout<<sizeof(X)<<endl; 結果 12 ===》內存補齊
cout<<sizeof(x)<<endl; 結果 12 同上。
內存補齊是一個在筆試面試中比較容易考的知識點
感謝你的閱讀,相信你對“如何進行sizeof和strlen解析”這一問題有一定的了解,快去動手實踐吧,如果想了解更多相關知識點,可以關注億速云網站!小編會繼續為大家帶來更好的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。