在複習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的結果是該資料類型(數組)的長度