最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Sizeof與Strlen的區(qū)別以及聯(lián)系的使用詳解

 更新時(shí)間:2013年05月06日 11:46:23   作者:  
本篇文章是對(duì)Sizeof與Strlen的區(qū)別以及聯(lián)系的使用進(jìn)行了詳細(xì)的介紹。需要的朋友參考下

一、sizeof
    sizeof(...)是運(yùn)算符,在頭文件中typedef為unsigned int,其值在編譯時(shí)即計(jì)算好了,參數(shù)可以是數(shù)組、指針、類型、對(duì)象、函數(shù)等。
    它的功能是:獲得保證能容納實(shí)現(xiàn)所建立的最大對(duì)象的字節(jié)大小。
    由于在編譯時(shí)計(jì)算,因此sizeof不能用來返回動(dòng)態(tài)分配的內(nèi)存空間的大小。實(shí)際上,用sizeof來返回類型以及靜態(tài)分配的對(duì)象、結(jié)構(gòu)或數(shù)組所占的空間,返回值跟對(duì)象、結(jié)構(gòu)、數(shù)組所存儲(chǔ)的內(nèi)容沒有關(guān)系。
    具體而言,當(dāng)參數(shù)分別如下時(shí),sizeof返回的值表示的含義如下:
    數(shù)組——編譯時(shí)分配的數(shù)組空間大??;
    指針——存儲(chǔ)該指針?biāo)玫目臻g大?。ù鎯?chǔ)該指針的地址的長度,是長整型,應(yīng)該為4);
    類型——該類型所占的空間大??;
    對(duì)象——對(duì)象的實(shí)際占用空間大?。?BR>    函數(shù)——函數(shù)的返回類型所占的空間大小。函數(shù)的返回類型不能是void。
**************

二、strlen
    strlen(...)是函數(shù),要在運(yùn)行時(shí)才能計(jì)算。參數(shù)必須是字符型指針(char*)。當(dāng)數(shù)組名作為參數(shù)傳入時(shí),實(shí)際上數(shù)組就退化成指針了。
    它的功能是:返回字符串的長度。該字符串可能是自己定義的,也可能是內(nèi)存中隨機(jī)的,該函數(shù)實(shí)際完成的功能是從代表該字符串的第一個(gè)地址開始遍歷,直到遇到結(jié)束符NULL。返回的長度大小不包括NULL。
*****************

三、舉例:
    eg1、char arr[10] = "What?";
              int len_one = strlen(arr);
              int len_two = sizeof(arr);
              cout << len_one << " and " << len_two << endl;
    輸出結(jié)果為:5 and 10
    點(diǎn)評(píng):sizeof返回定義arr數(shù)組時(shí),編譯器為其分配的數(shù)組空間大小,不關(guān)心里面存了多少數(shù)據(jù)。strlen只關(guān)心存儲(chǔ)的數(shù)據(jù)內(nèi)容,不關(guān)心空間的大小和類型。

    eg2、char * parr = new char[10];
              int len_one = strlen(parr);
              int len_two = sizeof(parr);
              int len_three = sizeof(*parr);
              cout << len_one << " and " << len_two << " and " << len_three << endl;
    輸出結(jié)果:23 and 4 and 1
    點(diǎn)評(píng):第一個(gè)輸出結(jié)果23實(shí)際上每次運(yùn)行可能不一樣,這取決于parr里面存了什么(從parr[0]開始知道遇到第一個(gè)NULL結(jié)束);第二個(gè)結(jié)果實(shí)際上本意是想計(jì)算parr所指向的動(dòng)態(tài)內(nèi)存空間的大小,但是事與愿違,sizeof認(rèn)為parr是個(gè)字符指針,因此返回的是該指針?biāo)嫉目臻g(指針的存儲(chǔ)用的是長整型,所以為4);第三個(gè)結(jié)果,由于*parr所代表的是parr所指的地址空間存放的字符,所以長度為1。
************

四、參考資料:
Sizeof與Strlen的區(qū)別與聯(lián)系(轉(zhuǎn))

1.sizeof操作符的結(jié)果類型是size_t,它在頭文件中typedef為unsigned int類型。
該類型保證能容納實(shí)現(xiàn)所建立的最大對(duì)象的字節(jié)大小。

2.sizeof是算符,strlen是函數(shù)。

3.sizeof可以用類型做參數(shù),strlen只能用char*做參數(shù),且必須是以''\0''結(jié)尾的。
sizeof還可以用函數(shù)做參數(shù),比如:
short f();
printf("%d\n", sizeof(f()));
輸出的結(jié)果是sizeof(short),即2。

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

5.大部分編譯程序 在編譯的時(shí)候就把sizeof計(jì)算過了 是類型或是變量的長度這就是sizeof(x)可以用來定義數(shù)組維數(shù)的原因
char str[20]="0123456789";
int a=strlen(str); //a=10;
int b=sizeof(str); //而b=20;

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

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

8.當(dāng)適用了于一個(gè)結(jié)構(gòu)類型時(shí)或變量, sizeof 返回實(shí)際的大小,
當(dāng)適用一靜態(tài)地空間數(shù)組, sizeof 歸還全部數(shù)組的尺寸。
sizeof 操作符不能返回動(dòng)態(tài)地被分派了的數(shù)組或外部的數(shù)組的尺寸

9.數(shù)組作為參數(shù)傳給函數(shù)時(shí)傳的是指針而不是數(shù)組,傳遞的是數(shù)組的首地址,
如:
fun(char [8])
fun(char [])
都等價(jià)于 fun(char *)
在C++里參數(shù)傳遞數(shù)組永遠(yuǎn)都是傳遞指向數(shù)組首元素的指針,編譯器不知道數(shù)組的大小
如果想在函數(shù)內(nèi)知道數(shù)組的大小, 需要這樣做:
進(jìn)入函數(shù)后用memcpy拷貝出來,長度由另一個(gè)形參傳進(jìn)去
fun(unsiged char *p1, int len)
{
unsigned char* buf = new unsigned char[len+1]
memcpy(buf, p1, len);
}

我們能常在用到 sizeof 和 strlen 的時(shí)候,通常是計(jì)算字符串?dāng)?shù)組的長度
看了上面的詳細(xì)解釋,發(fā)現(xiàn)兩者的使用還是有區(qū)別的,從這個(gè)例子可以看得很清楚:

char str[20]="0123456789";
int a=strlen(str); //a=10; >>>> strlen 計(jì)算字符串的長度,以結(jié)束符 0x00 為字符串結(jié)束。
int b=sizeof(str); //而b=20; >>>> sizeof 計(jì)算的則是分配的數(shù)組 str[20] 所占的內(nèi)存空間的大小,不受里面存儲(chǔ)的內(nèi)容改變。

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

char* ss = "0123456789";
sizeof(ss) 結(jié)果 4 ===》ss是指向字符串常量的字符指針,sizeof 獲得的是一個(gè)指針的之所占的空間,應(yīng)該是

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

型的,占了 1 位

strlen(ss)= 10 >>>> 如果要獲得這個(gè)字符串的長度,則一定要使用 strlen

相關(guān)文章

  • C語言結(jié)構(gòu)體嵌套與對(duì)齊超詳細(xì)講解

    C語言結(jié)構(gòu)體嵌套與對(duì)齊超詳細(xì)講解

    這篇文章主要介紹了C語言結(jié)構(gòu)體嵌套與對(duì)齊,C語言中結(jié)構(gòu)體是一種構(gòu)造類型,和數(shù)組、基本數(shù)據(jù)類型一樣,可以定義指向該種類型的指針。結(jié)構(gòu)體指針的定義類似其他基本數(shù)據(jù)類型的定義
    2022-12-12
  • C++深入刨析muduo中的抽象類Poller

    C++深入刨析muduo中的抽象類Poller

    muduo網(wǎng)絡(luò)庫中Poller類是一個(gè)抽象類,用戶使用PollPoller或者EPollPoller類,下面跟隨小編一起來詳細(xì)了解一下
    2022-04-04
  • C語言動(dòng)態(tài)鏈表實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)

    C語言動(dòng)態(tài)鏈表實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言動(dòng)態(tài)鏈表實(shí)現(xiàn)學(xué)生學(xué)籍管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • C++全面精通類與對(duì)象

    C++全面精通類與對(duì)象

    類和對(duì)象是兩種以計(jì)算機(jī)為載體的計(jì)算機(jī)語言的合稱。對(duì)象是對(duì)客觀事物的抽象,類是對(duì)對(duì)象的抽象。類是一種抽象的數(shù)據(jù)類型;變量就是可以變化的量,存儲(chǔ)在內(nèi)存中—個(gè)可以擁有在某個(gè)范圍內(nèi)的可變存儲(chǔ)區(qū)域
    2022-05-05
  • C++實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(完整版)

    C++實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(完整版)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++實(shí)現(xiàn)簡易貪吃蛇游戲

    C++實(shí)現(xiàn)簡易貪吃蛇游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡易貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C++字符數(shù)組的輸入輸出和字符串結(jié)束標(biāo)志使用講解

    C++字符數(shù)組的輸入輸出和字符串結(jié)束標(biāo)志使用講解

    這篇文章主要介紹了C++字符數(shù)組的輸入輸出和符串結(jié)束標(biāo)志使用講解,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • 詳解VS2019+OpenCV-4-1-0+OpenCV-contrib-4-1-0

    詳解VS2019+OpenCV-4-1-0+OpenCV-contrib-4-1-0

    這篇文章主要介紹了詳解VS2019+OpenCV-4-1-0+OpenCV-contrib-4-1-0,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • C語言FlappyBird飛揚(yáng)的小鳥實(shí)現(xiàn)開發(fā)流程

    C語言FlappyBird飛揚(yáng)的小鳥實(shí)現(xiàn)開發(fā)流程

    因?yàn)樵诩艺撕枚嗵?,隨手玩了下自己以前做的一些小游戲,說真的,有幾個(gè)游戲做的是真的劣質(zhì),譬如 flappybird 真的讓我難以忍受,于是重做了一波分享給大家
    2022-11-11
  • 詳解C語言的mem系列函數(shù)

    詳解C語言的mem系列函數(shù)

    這篇文章主要為大家詳細(xì)介紹了C語言的mem系列函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02

最新評(píng)論

彰化市| 禄丰县| 邯郸市| 平顺县| 道孚县| 东宁县| 平陆县| 依安县| 开远市| 武强县| 眉山市| 长治市| 屯留县| 婺源县| 合阳县| 聊城市| 潮州市| 清原| 青铜峡市| 金坛市| 婺源县| 盘山县| 九江市| 台安县| 新绛县| 陆川县| 个旧市| 北宁市| 拜城县| 万安县| 买车| 西华县| 教育| 开封县| 张北县| 平武县| 灌南县| 云浮市| 泸水县| 蒙城县| 云霄县|