如果你經常刷筆試題,那你一定會刷到這樣的題目:
char str[] = “hello”; printf(“%d %d ”, sizeof(str), strlen(str)); const char *str = “hello”; printf(“%d %d ”, sizeof(str), strlen(str));
把 sizeof 和 strlen 放在一起考察,題目不難,只要你的C語言基本功扎實,做出來應該沒問題。
第一個,str是個數組,數組里面的內容是字符串hello。但是需要注意的是,字符串都是以'?'結尾,所以數組實際占6個字節。
sizeof是關鍵字,用于求解類型的長度,sizeof加上數組名,表示數組所占的字節數,所以結果是6。
strlen是字符串處理函數,求解字符串的長度,長度不包含'?',所以結果是5。
第二個,str是指針,指向字符串常量。
sizeof加上指針,表示指針變量占的字節數,32位系統是4字節,64位系統是8字節。至于說字符串長度,跟上面一樣,是5個字節。
這些都算是常見的,我們再來看下不常見的,指針都當作8字節來處理。
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]));
一個一維數組,&a表示數組的地址,sizeof(&a)是8字節。
*a表示數組第一個元素,sizeof(*a)是4個字節。
對于二維數組,b[0]表示首行首元素地址,類似于一維數組的數組名,sizeof(b[0])就是第一行的長度12字節。
b[0]+1表示首行第二個元素的地址,編譯器當作指針來處理,sizeof(b[0] + 1)是8個字節。
&b[0]表示數組首行地址,編譯器同樣把它當作指針來處理,sizeof(&b[0])也是8字節。
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
C語言
+關注
關注
180文章
7614瀏覽量
137720 -
字符串
+關注
關注
1文章
585瀏覽量
20603 -
函數
+關注
關注
3文章
4346瀏覽量
62973 -
指針
+關注
關注
1文章
481瀏覽量
70610 -
數組
+關注
關注
1文章
417瀏覽量
26028
原文標題:strlen和sizeof
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
C語言中void指針的基本認識及典型應用
C語言中,*類型就是指針類型,比如 int *p,double *q,雖然是不一樣的指針,但是大小卻一樣sizeof(p) == sizeof(q),因為它們都是同一種類型*類型的。
發表于 02-01 09:26
?1139次閱讀
C語言sizeof和strlen的區別
大家好,我是嵌入式老林,從事嵌入式軟件開發多年,今天分享的內容是C語言sizeof和strlen的區別,希望能對你有所幫助
發表于 07-11 11:51
?1495次閱讀
C語言中for循環的用法和應用 C語言中for循環與while循環的區別
C語言中的循環結構時,for循環是最常用的一種。它允許重復執行一段代碼,直到滿足特定條件為止。
發表于 08-18 16:33
?3371次閱讀
![<b class='flag-5'>C</b><b class='flag-5'>語言中</b>for循環的用法和應用 <b class='flag-5'>C</b><b class='flag-5'>語言中</b>for循環與while循環的<b class='flag-5'>區別</b>](https://file1.elecfans.com/web2/M00/91/51/wKgaomTfLICAFadXAAAF1QHPifc502.jpg)
strlen與sizeof區別
1.strlen(char*)函數求的是字符串的實際長度,它求得方法是從開始到遇到第一個'\0',如果你只定義沒有給它賦初值,這個結果是不定的,它會從aa首地址一直找下去,直到遇到'\0'停止。char aa[10];cout
發表于 02-10 10:44
【求助】C語言中sizeof使用錯誤
();printf("output\n");printf("%d",sizeof('c'));printf("%d",sizeof(string1
發表于 11-08 11:26
c語言中double與float的區別 相關資料分享
c語言中double與float的區別C語言中小數的數據類型為 float 或 double:float 稱為單精度浮點數,double 稱
發表于 07-01 09:10
sizeof與strlen到底有什么區別經典C語言面試題講解
基本定義1、sizeof是C/C++中的一個運算符,其作用是返回一個對象或者類型在內存中所占用的字節數。
注意:sizeof后面如果是類型則必須加括號,如
strlen和sizeof的異同
1,strlen函數作用:用于計算以空字符'\0'結尾的字符串的長度,即字符串中的字符個數,不包括空字符本身。返回值:strlen返回一個size_t類型的值,表示字符串中字符
![<b class='flag-5'>strlen</b>和<b class='flag-5'>sizeof</b>的異同](https://file.elecfans.com/web2/M00/09/16/pYYBAGD0FvWAeWpFAAAb1Fux1oA753.jpg)
評論