亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > C++ > 正文

C語(yǔ)言中sizeof()與strlen()函數(shù)的使用入門及對(duì)比

2020-05-23 14:12:01
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要介紹了C語(yǔ)言中sizeof()與strlen()函數(shù)的使用入門及對(duì)比,同時(shí)二者在C++中的使用情況也基本上同理,是需要的朋友可以參考下
 

sizeof()函數(shù)
1,是什么?
    sizeof其實(shí)就是一個(gè)運(yùn)算符,和那些+,-一樣的東西,在程序編譯的時(shí)候進(jìn)行解析轉(zhuǎn)換。雖然我們經(jīng)常見(jiàn)到sizeof后面跟著個(gè)小括號(hào),長(zhǎng)得和函數(shù)差不多,但它和函數(shù)完全是兩碼事。
2,有什么用?
    sizeof其實(shí)就是用于告訴我們編譯器在為某一特定數(shù)據(jù)或者某種數(shù)據(jù)類型的數(shù)據(jù)在存儲(chǔ)空間中開(kāi)辟空間時(shí),開(kāi)辟的空間大小,以字節(jié)為單位。
3,怎么用?
    sizeof(類型),或者sizeof(變量)都可以,得到的就是類型或者變量的存儲(chǔ)空間。當(dāng)對(duì)變量用的時(shí)候,也可以沒(méi)有括號(hào),直接 sizeof 變量,但一般不用(我一般都是只記一種通用的用法……)。
4,用的時(shí)候要注意什么?
(1)sizeof返回的占用空間大小是為這個(gè)變量開(kāi)辟的大小,而不只是它用到的空間。和現(xiàn)今住房的建筑面積和實(shí)用面積的概念差不多。所以對(duì)結(jié)構(gòu)體用的時(shí)候,大多情況下就得考慮字節(jié)對(duì)齊的問(wèn)題了。
(2)對(duì)位域成員等連編譯器都無(wú)法確定存儲(chǔ)空間的東西不能用。這個(gè)應(yīng)該比較好理解,因?yàn)閟izeof返回的都是以字節(jié)為單位的數(shù)據(jù),你讓它去求那些以位為單位的大小,這不是存心難為編譯器嘛。所以編譯器采用的方案是統(tǒng)一不受理,即使你說(shuō)你剛好是8位,占一個(gè)字節(jié),編譯器也不理你。
(3)sizeof返回的數(shù)據(jù)類型是unsigned int。因?yàn)镃中不同類型數(shù)據(jù)混合運(yùn)算時(shí)的自動(dòng)轉(zhuǎn)換,有時(shí)候不注意的話可能會(huì)出問(wèn)題,具體可以參照下面的程序例子。
(4)要注意數(shù)組名和指針變量的區(qū)別。通常情況下,我們總覺(jué)得數(shù)組名和指針變量差不多,但是在用sizeof的時(shí)候差別很大,對(duì)數(shù)組名用sizeof返回的是整個(gè)數(shù)組的大小,而對(duì)指針變量進(jìn)行操作的時(shí)候返回的則是指針變量本身所占得空間,在32位機(jī)的條件下一般都是4。而且當(dāng)數(shù)組名作為函數(shù)參數(shù)時(shí),在函數(shù)內(nèi)部,形參也就是個(gè)指針,所以不再返回?cái)?shù)組的大小。
5,實(shí)例分析
源碼:

#include<stdio.h> int main(){    int iVal = 3;    printf("The size of type int is %d /n", sizeof(int));    printf("The size of iVal is %d/n", sizeof(iVal));    printf("The size of iVal is %d/n", sizeof iVal);     if((iVal - sizeof(int)) < 0)    {        printf("The return type is int/n");    }    else    {        printf("The return type is unsigned int/n");    }     char chArrayCon[7];    char *chp;    chp = chArrayCon;    printf("The size of chArrayCon is %d, The size of chp is %d/n", sizeof(chArrayCon), sizeof(chp));     int iArraySize = 3;    char chArrayVar[iArraySize];    printf("The size of chArrayVar is %d/n", sizeof(chArrayVar));    return 0;}

運(yùn)行結(jié)果:

The size of type int is 4 The size of iVal is 4The size of iVal is 4The return type is unsigned intThe size of chArrayCon is 7, The size of chp is 4The size of chArrayVar is 3

結(jié)果分析:
    代碼第一部分主要就是簡(jiǎn)單的表示了一下用法。
    第二部分說(shuō)明了注意事項(xiàng)的第三項(xiàng)。按說(shuō),iVal的值是3,減4的話應(yīng)該是-1,小于0,輸出的應(yīng)該是"he return type is int"。但是由于當(dāng)int和unsigned int一起運(yùn)算時(shí),會(huì)默認(rèn)變成unsigned int,所以結(jié)果會(huì)是一個(gè)很大的unsigned int類型的數(shù),是大于0的。
    代碼第三部分就簡(jiǎn)單說(shuō)明了數(shù)組名和指針變量的區(qū)別,即使你把指針變量指向數(shù)組名,編譯器依然能夠分辨出區(qū)別。

    以上講述的都沒(méi)有考慮在C99標(biāo)準(zhǔn)下的情況。因?yàn)樵贑99標(biāo)準(zhǔn)下有種特殊情況,那就是不定長(zhǎng)數(shù)組的使用。當(dāng)對(duì)不定長(zhǎng)數(shù)組名使用sizeof的話,返回的也是整個(gè)數(shù)組的大小,就像實(shí)例中第四塊代碼一樣。但是這并不是在編譯階段執(zhí)行的,而是在程序運(yùn)行階段執(zhí)行的。因?yàn)樵诰幾g的時(shí)候,編譯器一般不知道變量的值是多少。(當(dāng)然例子中我直接賦值3,可能不方便理解,可以假想iArraySize是通過(guò)scanf來(lái)獲得實(shí)際數(shù)值的,然后再聲明數(shù)組的)。對(duì)于這種情況,實(shí)際中應(yīng)用的并不多,大家可以當(dāng)做特殊情況對(duì)待即可,或者直接忽略掉也行……
6總結(jié)
    其實(shí)sizeof的作用就是告訴我們分配給變量的“建筑面積”的大小,只要記得這一點(diǎn)應(yīng)該就夠了,不管這個(gè)變量類型是普通的整型數(shù)據(jù),還是結(jié)構(gòu)體,共用體,枚舉……記住這一點(diǎn)后,當(dāng)我們?cè)偃ハ胫纒izeof對(duì)不同數(shù)據(jù)類型操作返回的值到底是什么的時(shí)候,只需搞明白那些數(shù)據(jù)類型到底要消耗多少“建筑面積”就可以啦!

strlen()函數(shù)
C庫(kù)函數(shù) size_t strlen(const char *str) 計(jì)算字符串str的長(zhǎng)度,但不包括終止空字符。

聲明
以下是聲明的strlen() 函數(shù)。

size_t strlen(const char *str)

參數(shù)
str -- 這是字符串的長(zhǎng)度要計(jì)算的。

返回值
這個(gè)函數(shù)返回字符串的長(zhǎng)度。

例子
下面的例子顯示使用strlen() 函數(shù)。

#include <stdio.h>#include <string.h>int main (){  char str[50];  int len;  strcpy(str, "This is yiibai.com");  len = strlen(str);  printf("Length of |%s| is |%d|", str, len);    return(0);}

讓我們編譯和運(yùn)行上面的程序,這將產(chǎn)生以下結(jié)果:

Length of |This is yiibai.com| is |26|


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

2. sizeof是運(yùn)算符(C++ 關(guān)鍵字),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就退化為指針了。大部分編譯程序在編譯的時(shí)候就把sizeof計(jì)算過(guò)了,是類型或是變量的長(zhǎng)度,這就是sizeof(x)可以用來(lái)定義數(shù)組維數(shù)的原因。

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

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

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

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

7. 數(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拷貝出來(lái),長(zhǎng)度由另一個(gè)形參傳進(jìn)去

fun(unsiged char *p1, int len){ unsigned char* buf = new unsigned char[len+1]  memcpy(buf, p1, len);}

sizeof對(duì)指針的話,結(jié)果是相應(yīng)的類型:

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個(gè)字節(jié),strlen(ss)= 10 >>>> 如果要獲得這個(gè)字符串的長(zhǎng)度,則一定要使用 strlen.



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
老头老太做爰xxx视频| 91成人在线视频| 精品播放一区二区| 亚洲精品欧美| 亚洲综合社区网| 国产亚洲欧美日韩美女| 在线一区二区三区精品| 99久久免费视频.com| 国产精品网站在线播放| 日韩视频一区二区三区| 国产又粗又猛又爽又黄的视频小说| 精品视频麻豆入口| 国产欧美日韩视频在线观看| 精品国产亚洲一区二区三区| 欧美丰满艳妇bbwbbw| 伊人免费在线观看| 国产精品黑丝在线播放| 欧美性久久久久| 日韩视频网站在线观看| 国产精品视频yy9099| 久久亚洲影音av资源网| 久久99精品国产.久久久久| 久久久久久亚洲精品不卡4k岛国| 欧美呦呦网站| 污视频网站在线看| 国产精品黄色大片| 国产+成+人+亚洲欧洲| 疯狂做受xxxx高潮欧美日本| 白白在线精品| 亚洲午夜久久久久久久| 欧美日韩精品三区| 一区二区三区四区免费| 国产日韩一区在线| 亚洲日本中文字幕| 久久久久久久午夜| 人妻精品久久久久中文字幕69| 成人福利片在线| 女人丝袜激情亚洲| 狠狠色丁香久久婷婷综| 日韩美女一区二区三区| 国产精品视频一区在线观看| 中国成人亚色综合网站| 欧性猛交ⅹxxx乱大交| julia中文字幕久久亚洲蜜臀| 国产视频每日更新| 自拍偷拍你懂的| 在线观看免费观看在线91| 久久精品国产亚洲AV熟女| 亚洲一区和二区| 精品日韩毛片| 日韩精品免费视频人成| 国产免费电影网站入口| 成人精品鲁一区一区二区| 另类中文字幕网| 午夜国产福利| 国产亚洲精品福利| 91久热免费在线视频| 人妻互换一二三区激情视频| 欧美国产中文字幕| 欧美大片在线观看一区| 成人影视在线播放| 偷偷看偷偷操| 亚洲一区二区三区乱码aⅴ| 99xxxx成人网| 在线亚洲欧美专区二区| 99久久国产综合精品女小说| 精品国产污污免费网站入口| www.久久热.com| 国内精彩免费自拍视频在线观看网址| 最新在线观看av网站| 亚洲成av人片一区二区梦乃| 色婷婷国产精品免| 日韩毛片在线| 一级特黄色大片| 国产肉体ⅹxxx137大胆| 日韩hd视频在线观看| 无码av免费精品一区二区三区| 亚洲大胆在线| xfplay先锋影音夜色资源站| 国产91色在线免费| 亚洲女厕所小便bbb| 成人国产精品色哟哟| 老熟妇高潮一区二区三区| 国产+成+人+亚洲欧洲在线| 色播在线视频| 国产激情视频一区二区| 日本福利一区二区| 中文字幕日韩精品在线观看| 亚洲成人一区二区在线观看| 日本精品在线免费观看| 国产三级精品视频| 亚洲中文字幕一区| 五月婷婷综合在线观看| 美女视频亚洲色图| 亚洲自拍偷拍图| 久久99精品久久久久久水蜜桃| 成人观看免费视频| 色婷婷av一区二区三区之e本道| 成人中文视频| 欧美成人一区二区三区电影| 91免费观看国产| 97香蕉超级碰碰久久免费软件| 国产在线制服美女| 狠狠做深爱婷婷久久综合一区| 欧美性猛交xxxx富婆| 国产强被迫伦姧在线观看无码| 免费xxxx性欧美18vr| 免费观看在线一区二区三区| 精品无人国产偷自产在线| 全部免费的黄色毛片| 天天操天天爽天天干| 无码人妻av免费一区二区三区| 亚洲精品一区二区18漫画| 麻豆最新免费在线视频| 国产va免费精品高清在线观看| 亚洲欧美春色| 久久一区二区三区电影| 色视频网站在线观看| 日本a级c片免费看三区| 色视频在线看| 美女精品导航| 91在线精品入口| 91久久在线播放| 日韩中文字幕在线播放| 欧美熟妇一区二区| 日韩不卡视频一区二区| 久久免费影院| 秋霞av亚洲一区二区三| 亚洲四虎av| 精品视频中文字幕| 97精品在线观看| 国产日韩一区二区三区| 国产一区二区三区视频在线| 日韩一区二区三区免费观看| 免费一级特黄3大片视频| 国产性猛交xxxx免费看久久| 在线播放豆国产99亚洲| 好吊操这里只有精品| 国产精品免费视频xxxx| 成人福利视频网站| 深夜av在线| 亚洲蜜臀av乱码久久精品| 欧美三级在线播放| 成年男人的天堂| 一级欧美一级日韩片| 日韩制服一区| 欧美激情在线一区二区三区| 日韩高清电影免费| 亚洲精品乱码久久久久久蜜桃图片| 日韩精品久久久久久久的张开腿让| 日韩精品久久久久久久电影99爱| 奇米精品一区二区三区在线观看| 狠狠综合久久av一区二区| 久久亚洲精品人成综合网| 国产精品成人69xxx免费视频| 国产精品剧情在线亚洲| 最近中文字幕无免费| 亚洲情趣在线观看| 欧美黑人视频一区| 女生裸体无遮挡天堂网站免费| www.操操| 污污视频网站在线| 精品91自产拍在线观看一区| 狠狠操在线视频| 国产又粗又猛又爽又黄91| 24小时免费看片在线观看| 国产又粗又大又爽的视频| 久久黄色av网站| 国产精品99久久久久久久vr| 伊人成综合网| 日本美女高清在线观看免费| 欧美日韩午夜剧场| 亚洲精品久久久久久久久| 亚洲欧美韩国综合色| 日韩a级作爱片一二三区免费观看| 黄色激情视频网址| 色婷婷国产精品久久包臀| 亚洲欧洲av另类| 99热在线网站| 欧美人与性动交xxⅹxx| 亚洲午夜一区| 香蕉成人啪国产精品视频综合网| 日韩欧美精品在线观看| 成人嫩草影院| 欧美一区二区麻豆红桃视频| 欧美性xxxx极品hd满灌| 日韩电影一区二区三区四区| 91美女片黄在线观看91美女| 调教+趴+乳夹+国产+精品| 欧美极品在线视频| 五月婷婷综合在线观看| 美女的诞生在线观看高清免费完整版中文| 成人国产精品色哟哟| 国产免费av电影| 91视频成人免费| 日韩一级黄色片| 天天夜碰日日摸日日澡| 国产精品18久久久久| 在线观看17c| 精品卡一卡二卡三卡四在线| 久久亚洲影院| 91国内精品久久久| 欧美日韩成人精品| 美女视频网站在线观看| 成人亚洲成人影院| 可以免费看的av毛片| av免费在线网站| 亚洲少妇诱惑| 野外做受又硬又粗又大视频√| 激情综合婷婷| 久久蜜桃av一区二区天堂| 亚洲男人都懂的| 国产欧美一区二区白浆黑人| 嫩草视频在线免费观看| 日本 欧美 国产| 五十路亲子中出中文字幕| 天天色天天操天天| 国产又爽又黄的激情精品视频| 三级视频在线| 亚洲一区二区中文| 激情欧美丁香| 亚洲乱码中文字幕综合| 欧美精品aaaa| 另类高清dbsm日本tvav| 亚洲午夜久久| 在线精品国产成人综合| 日本少妇激情舌吻| 欧美mv和日韩mv国产网站| 成年女人色毛片免费| 国产精品免费看一区二区三区| 四虎成人欧美精品在永久在线| 精品一区2区三区| 国产a视频精品免费观看| 国产精品久久久久不卡| 伦理在线一区| 91精品国产综合久久精品app| 午夜视频国产| 欧美熟妇激情一区二区三区| 蜜臀av免费在线观看| 天堂久久久久va久久久久| 婷婷开心激情网| 中文字幕在线观看视频网站| 精品欧美国产一区二区三区不卡| 国内精品美女av在线播放| 麻豆国产91在线播放| 欧美日韩午夜在线| 激情不卡一区二区三区视频在线| 精品日韩av一区二区| 九色综合狠狠综合久久| 视频一区二区三区四区五区| 国产网友自拍视频| 亚洲精品一区二三区| 性欧美videohd高精| 亚洲美腿欧美激情另类| 亚洲综合视频网站| 亚洲无毛电影| 久久久久久91亚洲精品中文字幕| 妺妺窝人体色www在线小说| 国产精品欧美经典| 欧洲日韩成人av| 亚洲一区亚洲二区亚洲三区| 自拍亚洲图区| eeuss影院18www免费| 91成人入口| 亚洲一区二区精品在线| 国产亚洲精品美女久久| av影片在线一区| 欧美在线视频二区| 在线中文字幕-区二区三区四区| 久久久久久久久艹| 久久久人成影片一区二区三区在哪下载| 国内不卡一区二区三区| 欧美一区二区女人| 国产精品成人免费精品自在线观看| 久久99最新地址| 国内精品在线观看视频| 亚洲图片 自拍偷拍| ㊣最新国产の精品bt伙计久久| 欧美色图在线视频| 成人黄色a级片| 国产精品99久久久久久成人| 国产精品videosex性欧美| 国产在线视频欧美一区二区三区| 黄色在线视频网址| 青青青国产在线观看| 日韩欧美电影| 国产视频久久久| 成人在线激情视频| 依依成人综合视频| 久一区二区三区| 久久草在线看| 99视频精品免费观看| 中文字幕日本一区二区| 好男人在线视频www| 国产高清自拍视频| 亚洲天堂视频在线| 精品国产一区二区三区性色av| 亚洲国产天堂久久综合网| 天天干天天插天天操| 久久成人这里只有精品| 欧美一区二区三区日韩| 亚洲黄色尤物视频| www.亚洲男人天堂| 国产麻花豆剧传媒精品mv在线| 羞羞免费视频网站| 成人在线免费观看91| 久久69精品久久久久久久电影好| mm视频在线视频| 一级黄色免费在线观看| 久久夜色精品国产亚洲aⅴ| 美女被久久久| 国产精品美女久久久久久免费| 激情亚洲综合在线| 国产91色在线|| 日韩免费视频在线观看| 大桥未久av一区二区三区中文| 蜜桃av乱码一区二区三区| 欧美性受xxxxxx黑人xyx性爽| 日本一区二区三级电影在线观看| 日本久久二区| 欧美区日韩区| 川上优的av在线一区二区| xfplay资源站夜色先锋5566| 成人免费a视频| 亚洲aⅴ优女av综合久久久| 成人国产激情| 北条麻妃高清一区| 青春草在线视频免费观看|