如果你經(jīng)常刷筆試題,那你一定會刷到這樣的題目:
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īng)該沒問題。
第一個,str是個數(shù)組,數(shù)組里面的內(nèi)容是字符串hello。但是需要注意的是,字符串都是以'?'結(jié)尾,所以數(shù)組實際占6個字節(jié)。
sizeof是關(guān)鍵字,用于求解類型的長度,sizeof加上數(shù)組名,表示數(shù)組所占的字節(jié)數(shù),所以結(jié)果是6。
strlen是字符串處理函數(shù),求解字符串的長度,長度不包含'?',所以結(jié)果是5。
第二個,str是指針,指向字符串常量。
sizeof加上指針,表示指針變量占的字節(jié)數(shù),32位系統(tǒng)是4字節(jié),64位系統(tǒng)是8字節(jié)。至于說字符串長度,跟上面一樣,是5個字節(jié)。
這些都算是常見的,我們再來看下不常見的,指針都當作8字節(jié)來處理。
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]));
一個一維數(shù)組,&a表示數(shù)組的地址,sizeof(&a)是8字節(jié)。
*a表示數(shù)組第一個元素,sizeof(*a)是4個字節(jié)。
對于二維數(shù)組,b[0]表示首行首元素地址,類似于一維數(shù)組的數(shù)組名,sizeof(b[0])就是第一行的長度12字節(jié)。
b[0]+1表示首行第二個元素的地址,編譯器當作指針來處理,sizeof(b[0] + 1)是8個字節(jié)。
&b[0]表示數(shù)組首行地址,編譯器同樣把它當作指針來處理,sizeof(&b[0])也是8字節(jié)。
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
C語言
+關(guān)注
關(guān)注
180文章
7604瀏覽量
136863 -
字符串
+關(guān)注
關(guān)注
1文章
579瀏覽量
20519 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4331瀏覽量
62633 -
指針
+關(guān)注
關(guān)注
1文章
480瀏覽量
70564 -
數(shù)組
+關(guān)注
關(guān)注
1文章
417瀏覽量
25949
原文標題:strlen和sizeof
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
C語言中void指針的基本認識及典型應(yīng)用
C語言中,*類型就是指針類型,比如 int *p,double *q,雖然是不一樣的指針,但是大小卻一樣sizeof(p) == sizeof(q),因為它們都是同一種類型*類型的。
發(fā)表于 02-01 09:26
?1101次閱讀
C語言sizeof和strlen的區(qū)別
大家好,我是嵌入式老林,從事嵌入式軟件開發(fā)多年,今天分享的內(nèi)容是C語言sizeof和strlen的區(qū)別,希望能對你有所幫助
發(fā)表于 07-11 11:51
?1425次閱讀
C語言中for循環(huán)的用法和應(yīng)用 C語言中for循環(huán)與while循環(huán)的區(qū)別
C語言中的循環(huán)結(jié)構(gòu)時,for循環(huán)是最常用的一種。它允許重復執(zhí)行一段代碼,直到滿足特定條件為止。
發(fā)表于 08-18 16:33
?3262次閱讀
strlen與sizeof區(qū)別
1.strlen(char*)函數(shù)求的是字符串的實際長度,它求得方法是從開始到遇到第一個'\0',如果你只定義沒有給它賦初值,這個結(jié)果是不定的,它會從aa首地址一直找下去,直到遇到'\0'停止。char aa[10];cout
發(fā)表于 02-10 10:44
【求助】C語言中sizeof使用錯誤
();printf("output\n");printf("%d",sizeof('c'));printf("%d",sizeof(string1
發(fā)表于 11-08 11:26
c語言中double與float的區(qū)別 相關(guān)資料分享
c語言中double與float的區(qū)別C語言中小數(shù)的數(shù)據(jù)類型為 float 或 double:float 稱為單精度浮點數(shù),double 稱
發(fā)表于 07-01 09:10
sizeof和strlen函數(shù)的區(qū)別在哪
野指針是指指針指向的位置是不可知的,主要成因是什么?sizeof和strlen函數(shù)的區(qū)別在哪?鏈表和數(shù)組的區(qū)別在哪?
發(fā)表于 12-24 07:19
sizeof與strlen到底有什么區(qū)別經(jīng)典C語言面試題講解
基本定義1、sizeof是C/C++中的一個運算符,其作用是返回一個對象或者類型在內(nèi)存中所占用的字節(jié)數(shù)。
注意:sizeof后面如果是類型則必須加括號,如
C語言的sizeof操作符基礎(chǔ)和經(jīng)典問題
在C語言中,sizeof是一個操作符(operator),而不是函數(shù)!其用于判斷數(shù)據(jù)類型或者表達式長度(所占的內(nèi)存字節(jié)數(shù))。其有兩種表達形式:
C語言中的char數(shù)組和char指針有什么區(qū)別?
讓我們通過下面的例子,來了解 C語言中字符數(shù)組和字符指針之間的區(qū)別。
嵌入式C語言中堆和棧的區(qū)別
在嵌入式C語言中,堆和棧都是用來存儲變量的內(nèi)存區(qū)域,但它們在存儲和使用變量方面有很大的區(qū)別。
strlen和sizeof的異同
1,strlen函數(shù)作用:用于計算以空字符'\0'結(jié)尾的字符串的長度,即字符串中的字符個數(shù),不包括空字符本身。返回值:strlen返回一個size_t類型的值,表示字符串中字符
評論