已知 char *str1="absde";
char str2="absde";
char str3[8]=;
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)=6
str3已經定義成了長度是8的陣列,所以sizeof(str3)為8
str4和str2類似,'0' '1' ... '9'加上'\0'共11個字元,所以ss佔的空間是8
總之,對於指標,sizeof操作符返回這個指標佔的空間,一般是4個位元組;而對於乙個陣列,sizeof返回這個陣列所有元素佔的總空間。char*與char容易混淆,一定要分清,而且char*="aaa"的寫法現在不被提倡,應予以避免
而strlen不區分是陣列還是指標,就讀到\0為止返回長度。而且strlen是不把\0計入字串的長度的。
sizeof 陣列 指標
千萬不要把陣列名看成指標,儘管有些時候他們是相通的,但也僅限某些時候而已。sizeof是乙個奇特的函式,告訴你你也許不相信 sizeof在編譯的時候就已經確定sizeof的結果了,這有點類似於巨集。char str hello sizeof str 6 編譯器編譯的時候根據上下文完全知道str是乙個...
sizeof 陣列與指標
注 本文摘自csdn論壇的乙個回帖,個人覺得看完之後豁然開朗,於是轉貼於此。位址為 http topic.csdn.net u 20081016 23 6b46dc63 b0d7 4dad 806f e8cd48a2208b.html 千萬不要把陣列名看成指標,儘管有些時候他們是相通的,但也僅限某些...
sizeof 陣列名 和sizeof 指標
在做這道題時 32位環境下,int p new int 10 請問sizeof p 的值為 a 4 b 10 c 40 d 8 我以為正確答案為c,int型別為32位,佔四個位元組,10個自然就是40了,結果正確答案為a,只是指標p佔的空間。因此寫段 測試一下 cpp view plain copy...