欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言中的sizeof操作符用法及和strlen的區(qū)別

 更新時間:2015年07月09日 10:58:55   投稿:junjie  
這篇文章主要介紹了C語言中的sizeof操作符用法及和strlen的區(qū)別,本文講解了sizeof的定義、sizeof的語法以及使用實例,最后給出sizeof與strlen的區(qū)別,需要的朋友可以參考下

一、 定義:

  sizeof是C/C++中的一個操作符(operator),簡單的說其作用就是返回一個對象或者類型所占的內(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。

二、語法:

sizeof有三種語法形式,如下:

1) sizeof( object ); // sizeof( 對象 );
2) sizeof( type_name ); // sizeof( 類型 );
) sizeof object; // sizeof 對象;
 
sizeof( 2 ); // 2的類型為int,所以等價于 sizeof( int );
sizeof( 2 +3.14); // 3.14的類型為double,2也會被提升成double類型,所以等價于 sizeof( double );
 
三、舉例說明:

char* ss = "0123456789";
sizeof(ss) 結(jié)果 4 ===》ss是指向字符串常量的字符指針
sizeof(*ss) 結(jié)果 1 ===》*ss是第一個字符
char ss[] = "0123456789";
sizeof(ss) 結(jié)果 11 ===》ss是數(shù)組,計算到\0位置,因此是10+1
sizeof(*ss) 結(jié)果 1 ===》*ss是第一個字符
char ss[100] = "0123456789";
sizeof(ss) 結(jié)果是100 ===》ss表示在內(nèi)存中的大小 100×1
strlen(ss) 結(jié)果是10 ===》strlen是個函數(shù)內(nèi)部實現(xiàn)是用一個循環(huán)計算到\0為止之前
int ss[100] = "0123456789";
sizeof(ss) 結(jié)果 400 ===》ss表示再內(nèi)存中的大小 100×4
strlen(ss) 錯誤 ===》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ù)組的首地址,如: fun(char [8])、fun(char []),都等價于 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.大部分編譯程序 在編譯的時候就把sizeof計算過了 是類型或是變量的長度這就是sizeof(x)可以用來定義數(shù)組維數(shù)的原因,strlen的結(jié)果要在運行的時候才能計算出來,是用來計算字符串的長度,不是類型占內(nèi)存的大小。

char str[20]="0123456789";
int a=strlen(str); //a=10;
int b=sizeof(str); //而b=20;


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

相關(guān)文章

  • C++ sort排序之降序、升序使用總結(jié)

    C++ sort排序之降序、升序使用總結(jié)

    這篇文章主要介紹了C++ sort 排序(降序、升序)使用總結(jié),需要的朋友可以參考下
    2020-11-11
  • C++入門指南之貪吃蛇游戲的實現(xiàn)

    C++入門指南之貪吃蛇游戲的實現(xiàn)

    這篇文章主要給大家介紹了關(guān)于C++入門指南之貪吃蛇游戲?qū)崿F(xiàn)的相關(guān)資料,文章通過示例代碼介紹的非常詳細,可以讓大家能短時間內(nèi)寫出一個貪吃蛇,需要的朋友可以參考下
    2021-10-10
  • C++中pair的用法總結(jié)

    C++中pair的用法總結(jié)

    pair是C++STL(標(biāo)準模板庫)中的一個現(xiàn)有容器,它將2個數(shù)據(jù)整合成一組數(shù)據(jù),當(dāng)我們類似需求的時候就可以使用到pair,pair的本質(zhì)其實就是個結(jié)構(gòu)體,本文將詳細的給大家介紹pair用法,感興趣的同學(xué)可以參考閱讀
    2023-05-05
  • C++超詳細探究new/delete的使用

    C++超詳細探究new/delete的使用

    這篇文章主要介紹了C++中new與deleted關(guān)鍵字的使用,new在動態(tài)內(nèi)存中為對象分配空間并返回一個指向該對象的指針;delete接受一個動態(tài)對象的指針, 銷毀該對象, 并釋放與之關(guān)聯(lián)的內(nèi)存
    2022-07-07
  • Qt實現(xiàn)UDP多線程數(shù)據(jù)處理及發(fā)送的簡單實例

    Qt實現(xiàn)UDP多線程數(shù)據(jù)處理及發(fā)送的簡單實例

    本文主要介紹了Qt實現(xiàn)UDP多線程數(shù)據(jù)處理及發(fā)送的簡單實例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C++實現(xiàn)轉(zhuǎn)置矩陣的循環(huán)

    C++實現(xiàn)轉(zhuǎn)置矩陣的循環(huán)

    大家好,本篇文章主要講的是C++實現(xiàn)轉(zhuǎn)置矩陣的循環(huán),感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • C語言數(shù)據(jù)結(jié)構(gòu)中堆排序的分析總結(jié)

    C語言數(shù)據(jù)結(jié)構(gòu)中堆排序的分析總結(jié)

    堆是計算機科學(xué)中一類特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱,通常是一個可以被看做一棵完全二叉樹的數(shù)組對象。而堆排序是利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計的一種排序算法。本文將通過圖片詳細介紹堆排序,需要的可以參考一下
    2022-04-04
  • VC判斷進程是否具有administrator權(quán)限的方法

    VC判斷進程是否具有administrator權(quán)限的方法

    這篇文章主要介紹了VC判斷進程是否具有administrator權(quán)限的方法,在Windows應(yīng)用程序設(shè)計中具有一定的實用價值,需要的朋友可以參考下
    2014-10-10
  • 用C++實現(xiàn)推箱子

    用C++實現(xiàn)推箱子

    這篇文章主要為大家詳細介紹了用C++實現(xiàn)推箱子,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • C語言解決字符串中插入和刪除某段字符串問題

    C語言解決字符串中插入和刪除某段字符串問題

    這篇文章主要介紹了C語言解決字符串中插入和刪除某段字符串問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論