如何進(jìn)行sizeof和strlen解析

這篇文章的內(nèi)容主要圍繞如何進(jìn)行sizeof和strlen解析進(jìn)行講述,文章內(nèi)容清晰易懂,條理清晰,非常適合新手學(xué)習(xí),值得大家去閱讀。感興趣的朋友可以跟隨小編一起閱讀吧。希望大家通過(guò)這篇文章有所收獲!

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到四子王網(wǎng)站設(shè)計(jì)與四子王網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋四子王地區(qū)。

1.strlen函數(shù).

strlen所作的僅僅是一個(gè)計(jì)數(shù)器的工作,它從內(nèi)存的某個(gè)位置(可以是字符串開(kāi)頭,中間某個(gè)位置,甚至是某個(gè)不確定的內(nèi)存區(qū)域)開(kāi)始掃描,直到碰到第一個(gè)字符串結(jié)束符 '\0'為止,然后返回計(jì)數(shù)器值

2.sizeof操作符

sizeof()返回的是變量聲明后所占的內(nèi)存數(shù),不是實(shí)際長(zhǎng)度,此外sizeof不是函數(shù),僅僅是一個(gè)操作符。

3.strlen和sizeof的區(qū)別

3.1  sizeof可以用類型做參數(shù),strlen只能用char*做參數(shù),且必須是以''\0''結(jié)尾的。

3.2  sizeof還可以用函數(shù)做參數(shù),比如:short f(); printf("%d\n", sizeof(f()));輸出的結(jié)果是sizeof(short),即2。

3.3  數(shù)組做sizeof的參數(shù)不退化,傳遞給strlen就退化為指針了。

3.4  大部分編譯程序在編譯的時(shí)候就把sizeof計(jì)算過(guò)了是類型或是變量的長(zhǎng)度這就是sizeof(x)可以用來(lái)定義數(shù)組維數(shù)的原因。

3.5  strlen的結(jié)果要在運(yùn)行的時(shí)候才能計(jì)算出來(lái),是用來(lái)計(jì)算字符串的長(zhǎng)度,不是類型占內(nèi)存的大小。

3.6  sizeof后如果是類型必須加括弧,如果是變量名可以不加括弧。這是因?yàn)閟izeof是個(gè)操作符不是個(gè)函數(shù)。

4.舉例區(qū)別strlen和sizeof

1.char str[20]="0123456789";

int a=strlen(str); //a=10; >>>> strlen 計(jì)算字符串的長(zhǎng)度,以結(jié)束符 0x00 為字符串結(jié)束。

int b=sizeof(str); //而b=20; >>>> sizeof 計(jì)算的則是分配的數(shù)組 str[20] 所占的內(nèi)存空間的大小,不受里面存儲(chǔ)的內(nèi)容改變。

2.上面是對(duì)靜態(tài)數(shù)組處理的結(jié)果,如果是對(duì)指針,結(jié)果就不一樣了

char* ss = "0123456789";   

sizeof(ss) 結(jié)果 4 ===》ss是指向字符串常量的字符指針,sizeof 獲得的是一個(gè)指針的之所占的空間,應(yīng)該是長(zhǎng)整型的,所以是4

而sizeof(*ss) 結(jié)果 1 ===》*ss是第一個(gè)字符,其實(shí)就是獲得了字符串的第一位'0' 所占的內(nèi)存空間,是char類型的,占了 1位

strlen(ss)= 10 >>>> 如果要獲得這個(gè)字符串的長(zhǎng)度,則一定要使用 strlen。 sizeof返回對(duì)象所占用的字節(jié)大小. strlen返回字符個(gè)數(shù)。

3.在使用sizeof時(shí),有一個(gè)很特別的情況,就是數(shù)組名到指針蛻變,

char Array[3] = {'0'};

sizeof(Array) == 3;

char *p = Array;   

strlen(p) == 1;//sizeof(p)結(jié)果為4

在傳遞一個(gè)數(shù)組名到一個(gè)函數(shù)中時(shí),它會(huì)完全退化為一個(gè)指針

4. 內(nèi)存補(bǔ)齊

class X

{

  int i;

  int j;

  char k;

};

X x;

cout<<sizeof(X)<<endl; 結(jié)果 12 ===》內(nèi)存補(bǔ)齊

cout<<sizeof(x)<<endl; 結(jié)果 12 同上。

內(nèi)存補(bǔ)齊是一個(gè)在筆試面試中比較容易考的知識(shí)點(diǎn) 

感謝你的閱讀,相信你對(duì)“如何進(jìn)行sizeof和strlen解析”這一問(wèn)題有一定的了解,快去動(dòng)手實(shí)踐吧,如果想了解更多相關(guān)知識(shí)點(diǎn),可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站!小編會(huì)繼續(xù)為大家?guī)?lái)更好的文章!

網(wǎng)頁(yè)標(biāo)題:如何進(jìn)行sizeof和strlen解析
網(wǎng)頁(yè)路徑:http://muchs.cn/article6/ghecig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)做網(wǎng)站、自適應(yīng)網(wǎng)站、企業(yè)建站、網(wǎng)頁(yè)設(shè)計(jì)公司、全網(wǎng)營(yíng)銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)