如果你經常刷筆試題,那你一定會刷到這樣的題目:
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文章
7601瀏覽量
136251 -
字符串
+關注
關注
1文章
577瀏覽量
20488 -
函數
+關注
關注
3文章
4308瀏覽量
62449 -
指針
+關注
關注
1文章
480瀏覽量
70513 -
數組
+關注
關注
1文章
416瀏覽量
25915
原文標題:strlen和sizeof
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
C語言中void指針的基本認識及典型應用
C語言中,*類型就是指針類型,比如 int *p,double *q,雖然是不一樣的指針,但是大小卻一樣sizeof(p) == sizeof(q),因為它們都是同一種類型*類型的。
發表于 02-01 09:26
?1063次閱讀
C語言sizeof和strlen的區別
大家好,我是嵌入式老林,從事嵌入式軟件開發多年,今天分享的內容是C語言sizeof和strlen的區別,希望能對你有所幫助
發表于 07-11 11:51
?1292次閱讀
C語言中for循環的用法和應用 C語言中for循環與while循環的區別
C語言中的循環結構時,for循環是最常用的一種。它允許重復執行一段代碼,直到滿足特定條件為止。
發表于 08-18 16:33
?3160次閱讀
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類型的值,表示字符串中字符
評論