如果你經(jīng)常刷筆試題,那你一定會(huì)刷到這樣的題目:
char str[] = “hello”; printf(“%d %d ”, sizeof(str), strlen(str)); const char *str = “hello”; printf(“%d %d ”, sizeof(str), strlen(str));
把 sizeof 和 strlen 放在一起考察,題目不難,只要你的C語(yǔ)言基本功扎實(shí),做出來(lái)應(yīng)該沒(méi)問(wèn)題。
第一個(gè),str是個(gè)數(shù)組,數(shù)組里面的內(nèi)容是字符串hello。但是需要注意的是,字符串都是以'?'結(jié)尾,所以數(shù)組實(shí)際占6個(gè)字節(jié)。
sizeof是關(guān)鍵字,用于求解類型的長(zhǎng)度,sizeof加上數(shù)組名,表示數(shù)組所占的字節(jié)數(shù),所以結(jié)果是6。
strlen是字符串處理函數(shù),求解字符串的長(zhǎng)度,長(zhǎng)度不包含'?',所以結(jié)果是5。
第二個(gè),str是指針,指向字符串常量。
sizeof加上指針,表示指針變量占的字節(jié)數(shù),32位系統(tǒng)是4字節(jié),64位系統(tǒng)是8字節(jié)。至于說(shuō)字符串長(zhǎng)度,跟上面一樣,是5個(gè)字節(jié)。
這些都算是常見(jiàn)的,我們?cè)賮?lái)看下不常見(jiàn)的,指針都當(dāng)作8字節(jié)來(lái)處理。
int a[] = {1, 2, 3}; printf("%ld ",sizeof(&a)); printf("%ld ",sizeof(*a)); intb[2][3]={0}; printf("%ld ",sizeof(b[0])); printf("%ld ",sizeof(b[0]+1)); printf("%ld ",sizeof(&b[0]));
一個(gè)一維數(shù)組,&a表示數(shù)組的地址,sizeof(&a)是8字節(jié)。
*a表示數(shù)組第一個(gè)元素,sizeof(*a)是4個(gè)字節(jié)。
對(duì)于二維數(shù)組,b[0]表示首行首元素地址,類似于一維數(shù)組的數(shù)組名,sizeof(b[0])就是第一行的長(zhǎng)度12字節(jié)。
b[0]+1表示首行第二個(gè)元素的地址,編譯器當(dāng)作指針來(lái)處理,sizeof(b[0] + 1)是8個(gè)字節(jié)。
&b[0]表示數(shù)組首行地址,編譯器同樣把它當(dāng)作指針來(lái)處理,sizeof(&b[0])也是8字節(jié)。
審核編輯:湯梓紅
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7632瀏覽量
141520 -
字符串
+關(guān)注
關(guān)注
1文章
590瀏覽量
22206 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4379瀏覽量
64773 -
指針
+關(guān)注
關(guān)注
1文章
484瀏覽量
71168 -
數(shù)組
+關(guān)注
關(guān)注
1文章
420瀏覽量
26522
原文標(biāo)題:strlen和sizeof
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
C語(yǔ)言中void指針的基本認(rèn)識(shí)及典型應(yīng)用
C語(yǔ)言sizeof和strlen的區(qū)別
C語(yǔ)言中for循環(huán)的用法和應(yīng)用 C語(yǔ)言中for循環(huán)與while循環(huán)的區(qū)別

strlen與sizeof區(qū)別
【求助】C語(yǔ)言中sizeof使用錯(cuò)誤
c語(yǔ)言中double與float的區(qū)別 相關(guān)資料分享
sizeof和strlen函數(shù)的區(qū)別在哪
C51單片機(jī)C語(yǔ)言與標(biāo)準(zhǔn)C語(yǔ)言有什么區(qū)別?

sizeof與strlen到底有什么區(qū)別經(jīng)典C語(yǔ)言面試題講解
C語(yǔ)言的sizeof操作符基礎(chǔ)和經(jīng)典問(wèn)題

C語(yǔ)言中的char數(shù)組和char指針有什么區(qū)別?
嵌入式C語(yǔ)言中堆和棧的區(qū)別
strlen和sizeof的異同

評(píng)論