C語(yǔ)言中的sizeof操作符用法及和strlen的區(qū)別
一、 定義:
sizeof是C/C++中的一個(gè)操作符(operator),簡(jiǎn)單的說(shuō)其作用就是返回一個(gè)對(duì)象或者類型所占的內(nèi)存字節(jié)數(shù)。其返回值類型為size_t,在頭文件stddef.h中定義。在32位系統(tǒng)中:
char的sizeof值為1,char是我們編程能用的最小數(shù)據(jù)類型。
short的sizeof值為2;
int、float、long為4;
double為8;
所有的指針的sizeof值都為4。
二、語(yǔ)法:
sizeof有三種語(yǔ)法形式,如下:
1) sizeof( object ); // sizeof( 對(duì)象 );
2) sizeof( type_name ); // sizeof( 類型 );
) sizeof object; // sizeof 對(duì)象;
sizeof( 2 ); // 2的類型為int,所以等價(jià)于 sizeof( int );
sizeof( 2 +3.14); // 3.14的類型為double,2也會(huì)被提升成double類型,所以等價(jià)于 sizeof( double );
三、舉例說(shuō)明:
char* ss = "0123456789"; sizeof(ss) 結(jié)果 4 ===》ss是指向字符串常量的字符指針 sizeof(*ss) 結(jié)果 1 ===》*ss是第一個(gè)字符 char ss[] = "0123456789"; sizeof(ss) 結(jié)果 11 ===》ss是數(shù)組,計(jì)算到\0位置,因此是10+1 sizeof(*ss) 結(jié)果 1 ===》*ss是第一個(gè)字符 char ss[100] = "0123456789"; sizeof(ss) 結(jié)果是100 ===》ss表示在內(nèi)存中的大小 100×1 strlen(ss) 結(jié)果是10 ===》strlen是個(gè)函數(shù)內(nèi)部實(shí)現(xiàn)是用一個(gè)循環(huán)計(jì)算到\0為止之前 int ss[100] = "0123456789"; sizeof(ss) 結(jié)果 400 ===》ss表示再內(nèi)存中的大小 100×4 strlen(ss) 錯(cuò)誤 ===》strlen的參數(shù)只能是char* 且必須是以''\0''結(jié)尾的 char q[]="abc"; char p[]="a\n"; sizeof(q),sizeof(p),strlen(q),strlen(p); 結(jié)果是 4 3 3 2
四、sizeof與strlen的區(qū)別:
1.sizeof是算符,strlen是函數(shù)。數(shù)組作為參數(shù)傳給函數(shù)時(shí)傳的是指針而不是數(shù)組,傳遞的是數(shù)組的首地址,如: fun(char [8])、fun(char []),都等價(jià)于 fun(char *) ,所以數(shù)組做sizeof的參數(shù)不退化,傳遞給strlen就退化為指針了。
2.sizeof可以用類型做參數(shù),strlen只能用char*做參數(shù),且必須是以''\0''結(jié)尾的。sizeof還可以用函數(shù)做參數(shù),比如: short f(); printf("%d\n", sizeof(f()));輸出的結(jié)果是sizeof(short),即2。
3.大部分編譯程序 在編譯的時(shí)候就把sizeof計(jì)算過(guò)了 是類型或是變量的長(zhǎng)度這就是sizeof(x)可以用來(lái)定義數(shù)組維數(shù)的原因,strlen的結(jié)果要在運(yùn)行的時(shí)候才能計(jì)算出來(lái),是用來(lái)計(jì)算字符串的長(zhǎng)度,不是類型占內(nèi)存的大小。
char str[20]="0123456789"; int a=strlen(str); //a=10; int b=sizeof(str); //而b=20;
4.當(dāng)適用了于一個(gè)結(jié)構(gòu)類型時(shí)或變量, sizeof 返回實(shí)際的大小, 當(dāng)適用一靜態(tài)地空間數(shù)組, sizeof 歸還全部數(shù)組的尺寸。 sizeof 操作符不能返回動(dòng)態(tài)地被分派了的數(shù)組或外部的數(shù)組的尺寸 。
欄 目:C語(yǔ)言
本文標(biāo)題:C語(yǔ)言中的sizeof操作符用法及和strlen的區(qū)別
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/2980.html
您可能感興趣的文章
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用函數(shù)刪除字符
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)式函數(shù)庫(kù)
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)數(shù)怎么表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫分段 用c語(yǔ)言表示分段函數(shù)
- 04-02c語(yǔ)言編寫函數(shù)冒泡排序 c語(yǔ)言冒泡排序法函數(shù)
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段函數(shù)
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎么打出三角函數(shù)的值
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求階乘


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒(méi)有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?