0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語言中strlen和sizeof的區(qū)別

學(xué)益得智能硬件 ? 來源:學(xué)益得智能硬件 ? 2023-04-23 09:45 ? 次閱讀

如果你經(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語言基本功扎實(shí),做出來應(yīng)該沒問題。

第一個(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é)。至于說字符串長(zhǎng)度,跟上面一樣,是5個(gè)字節(jié)。

這些都算是常見的,我們?cè)賮砜聪虏怀R姷?,指針都?dāng)作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]));


一個(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)作指針來處理,sizeof(b[0] + 1)是8個(gè)字節(jié)。

&b[0]表示數(shù)組首行地址,編譯器同樣把它當(dāng)作指針來處理,sizeof(&b[0])也是8字節(jié)。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7575

    瀏覽量

    134092
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    566

    瀏覽量

    20384
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4237

    瀏覽量

    61969
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    475

    瀏覽量

    70457
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    411

    瀏覽量

    25821

原文標(biāo)題:strlen和sizeof

文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語言中void指針的基本認(rèn)識(shí)及典型應(yīng)用

    C語言中,*類型就是指針類型,比如 int *p,double *q,雖然是不一樣的指針,但是大小卻一樣sizeof(p) == sizeof(q),因?yàn)樗鼈兌际峭环N類型*類型的。
    發(fā)表于 02-01 09:26 ?975次閱讀

    C語言sizeofstrlen區(qū)別

    大家好,我是嵌入式老林,從事嵌入式軟件開發(fā)多年,今天分享的內(nèi)容是C語言sizeofstrlen區(qū)別,希望能對(duì)你有所幫助
    發(fā)表于 07-11 11:51 ?764次閱讀

    C語言中for循環(huán)的用法和應(yīng)用 C語言中for循環(huán)與while循環(huán)的區(qū)別

    C語言中的循環(huán)結(jié)構(gòu)時(shí),for循環(huán)是最常用的一種。它允許重復(fù)執(zhí)行一段代碼,直到滿足特定條件為止。
    發(fā)表于 08-18 16:33 ?2473次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>for循環(huán)的用法和應(yīng)用 <b class='flag-5'>C</b><b class='flag-5'>語言中</b>for循環(huán)與while循環(huán)的<b class='flag-5'>區(qū)別</b>

    strlensizeof區(qū)別

    1.strlen(char*)函數(shù)求的是字符串的實(shí)際長(zhǎng)度,它求得方法是從開始到遇到第一個(gè)'\0',如果你只定義沒有給它賦初值,這個(gè)結(jié)果是不定的,它會(huì)從aa首地址一直找下去,直到遇到'\0'停止。char aa[10];cout
    發(fā)表于 02-10 10:44

    c語言中double與float的區(qū)別 相關(guān)資料分享

    c語言中double與float的區(qū)別C語言中小數(shù)的數(shù)據(jù)類型為 float 或 double:float 稱為單精度浮點(diǎn)數(shù),double 稱
    發(fā)表于 07-01 09:10

    c語言中double與float區(qū)別是什么?

    c語言中double與float區(qū)別是什么?
    發(fā)表于 10-14 07:58

    sizeofstrlen函數(shù)的區(qū)別在哪

    野指針是指指針指向的位置是不可知的,主要成因是什么?sizeofstrlen函數(shù)的區(qū)別在哪?鏈表和數(shù)組的區(qū)別在哪?
    發(fā)表于 12-24 07:19

    C語言中指針的介紹非常詳細(xì)

    C語言中指針的介紹非常詳細(xì) C語言中指針的介紹非常詳細(xì)
    發(fā)表于 12-25 10:39 ?57次下載

    C語言中的關(guān)鍵字

    C語言中的入門教程
    發(fā)表于 10-14 16:24 ?3次下載

    C51單片機(jī)C語言與標(biāo)準(zhǔn)C語言有什么區(qū)別?

    一:C51(單片機(jī)C語言)與標(biāo)準(zhǔn)C語言區(qū)別1、 C
    發(fā)表于 10-09 08:00 ?134次下載
    <b class='flag-5'>C</b>51單片機(jī)<b class='flag-5'>C</b><b class='flag-5'>語言</b>與標(biāo)準(zhǔn)<b class='flag-5'>C</b><b class='flag-5'>語言</b>有什么<b class='flag-5'>區(qū)別</b>?

    sizeofstrlen到底有什么區(qū)別經(jīng)典C語言面試題講解

    基本定義1、sizeofC/C++中的一個(gè)運(yùn)算符,其作用是返回一個(gè)對(duì)象或者類型在內(nèi)存中所占用的字節(jié)數(shù)。 注意:sizeof后面如果是類型則必須加括號(hào),如
    的頭像 發(fā)表于 02-03 08:24 ?7165次閱讀

    C語言sizeof操作符基礎(chǔ)和經(jīng)典問題

    C語言中sizeof是一個(gè)操作符(operator),而不是函數(shù)!其用于判斷數(shù)據(jù)類型或者表達(dá)式長(zhǎng)度(所占的內(nèi)存字節(jié)數(shù))。其有兩種表達(dá)形式:
    的頭像 發(fā)表于 04-04 17:39 ?2586次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的<b class='flag-5'>sizeof</b>操作符基礎(chǔ)和經(jīng)典問題

    C語言中的char數(shù)組和char指針有什么區(qū)別

    讓我們通過下面的例子,來了解 C語言中字符數(shù)組和字符指針之間的區(qū)別
    的頭像 發(fā)表于 01-29 16:35 ?2348次閱讀

    嵌入式C語言中堆和棧的區(qū)別

    在嵌入式C語言中,堆和棧都是用來存儲(chǔ)變量的內(nèi)存區(qū)域,但它們?cè)诖鎯?chǔ)和使用變量方面有很大的區(qū)別
    的頭像 發(fā)表于 04-14 11:45 ?1207次閱讀

    strlensizeof的異同

    1,strlen函數(shù)作用:用于計(jì)算以空字符'\0'結(jié)尾的字符串的長(zhǎng)度,即字符串中的字符個(gè)數(shù),不包括空字符本身。返回值:strlen返回一個(gè)size_t類型的值,表示字符串中字符
    的頭像 發(fā)表于 12-13 08:00 ?494次閱讀
    <b class='flag-5'>strlen</b>和<b class='flag-5'>sizeof</b>的異同