C語言基礎(chǔ)學(xué)習(xí)之sizeof與strlen區(qū)別有哪些
2022-01-08點(diǎn)擊量:5160
在C/C++中,sizeof()是一個(gè)判斷數(shù)據(jù)類型或者表達(dá)式長(zhǎng)度的運(yùn)算符。今天我們主要來講一講C/C++基礎(chǔ)sizeof與strlen區(qū)別,下面先看看sizeof的定義:1、sizeof定義sizeof是C/C++中的一個(gè)操作符(operator),返回一個(gè)對(duì)象或者類型所占的內(nèi)存字節(jié)數(shù)。Thesizeofkeywordgivestheamountofstorage,inbytes,associatedwithavariableoratype(includingaggregatetypes).Thiskeywordreturnsavalueoftypesize_t.——來自MSDN其返回值類型為size_t,在頭文件stddef.h中定義為:typedefunsignedintsize_t;從sizeof的定義可以看出:sizeof不是一個(gè)函數(shù),因?yàn)楹瘮?shù)調(diào)用必須有一對(duì)括號(hào)。intnum=97;printf("sizeof(num=0)的值:%d\n",sizeof(num=0));printf("num的值:%d\n",num);運(yùn)行結(jié)果為4,97;并不是4,0說明:sizeof不是標(biāo)準(zhǔn)意義上的一元操作符,不支持鏈?zhǔn)奖磉_(dá)式,sizeof作用域范圍內(nèi)的語句不會(huì)編譯成機(jī)器碼,如sizeof(num++)中的++不執(zhí)行。sizeof也不是函數(shù),sizeof更像一個(gè)特殊的宏,在編譯階段求值。下面說一說sizeof與strlen區(qū)別:sizeof是一個(gè)操作符,strlen是庫函數(shù)。sizeof的參數(shù)可以是數(shù)據(jù)的類型,也可以是變量,而strlen只能以結(jié)尾。編譯器在編譯時(shí)就計(jì)算出了sizeof的結(jié)果,而strlen函數(shù)必須在運(yùn)行時(shí)才能計(jì)算出來。并且sizeof計(jì)算的是數(shù)據(jù)類型占內(nèi)存的大小,而strlen計(jì)算的是字符串實(shí)際的長(zhǎng)度。數(shù)組做sizeof的參數(shù)不退化,傳遞給strlen就退化為指針了。如:intss[20]="0123456789";sizeof(ss)=80,//ss表示在內(nèi)存中的大小,20*4。strlen(ss)//錯(cuò)誤,strlen的參數(shù)只能是char*,且必須是以“\0”結(jié)尾的。char*ss="0123456789";sizeof(ss)=4,//ss是指向字符串常量的字符指針。sizeof(*ss)=1,//*ss是第一個(gè)字符。本文由培訓(xùn)無憂網(wǎng)達(dá)內(nèi)教育專屬課程顧問老師整理發(fā)布,更多C語言課程信息可關(guān)注培訓(xùn)無憂網(wǎng)C語言培訓(xùn)頻道或添加老師微信:15033336050...