關於sizeof和strlen !!!

來源:互聯網
上載者:User

在複習c++過程中遇到了一個小小的計算,包含知識還不少,從細心開始吧,小知識大學問!

已知 char *str1="absde";     char str2[]="absde";     char str3[8]={'a',};     char ss[] = "0123456789";為什麼      sizeof(str1)=4      sizeof(str2)=6;      sizeof(str3)=8;       sizeof(ss)=11

          首先說明一點,char類型佔一個位元組,所以sizeof(char)是1,這點要理解str1是一個指標,只是指向了字串"absde"而已。所以sizeof(str1)不是字串占的空間也不是字元數組占的空間,而是一個字元型指標占的空間。所以sizeof(str1)=sizeof(char*)=4,在C/C++中一個指標佔4個位元組str2是一個字元型數組。C/C++規定,對於一個數組,返回這個數組占的總空間,所以sizeof(str2)取得的是字串"absde"占的總空間。"absde"中,共有a
b s d e \0六個字元,所以str2數組的長度是6,所以sizeof(str2)=6*sizeof(char)=6str3已經定義成了長度是8的數組,所以sizeof(str3)為8str4和str2類似,'0' '1' ... '9'加上'\0'共11個字元,所以ss占的空間是8總之,對於指標,sizeof操作符返回這個指標占的空間,一般是4個位元組;而對於一個數組,sizeof返回這個數組所有元素占的總空間。char*與char[]容易混淆,一定要分清,而且char*="aaa"的寫法現在不被提倡,應予以避免而strlen不區分是數組還是指標,就讀到\0為止返回長度。而且strlen是不把\0計入字串的長度的。



總的來說:

sizeof是算出它所指的資料類型的長度,

char *str1="absde";

str1是個指標,一個char指標的長度是4。

char str2[]="absde";

char str3[8]={'a',};

char ss[] = "0123456789";

str2,str3,ss都是數組,sizeof的結果是該資料類型(數組)的長度

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.