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

首頁 > 編程 > C++ > 正文

C語言中sizeof()與strlen()函數的使用入門及對比

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

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

#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;}

運行結果:

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

結果分析:
    代碼第一部分主要就是簡單的表示了一下用法。
    第二部分說明了注意事項的第三項。按說,iVal的值是3,減4的話應該是-1,小于0,輸出的應該是"he return type is int"。但是由于當int和unsigned int一起運算時,會默認變成unsigned int,所以結果會是一個很大的unsigned int類型的數,是大于0的。
    代碼第三部分就簡單說明了數組名和指針變量的區別,即使你把指針變量指向數組名,編譯器依然能夠分辨出區別。

    以上講述的都沒有考慮在C99標準下的情況。因為在C99標準下有種特殊情況,那就是不定長數組的使用。當對不定長數組名使用sizeof的話,返回的也是整個數組的大小,就像實例中第四塊代碼一樣。但是這并不是在編譯階段執行的,而是在程序運行階段執行的。因為在編譯的時候,編譯器一般不知道變量的值是多少。(當然例子中我直接賦值3,可能不方便理解,可以假想iArraySize是通過scanf來獲得實際數值的,然后再聲明數組的)。對于這種情況,實際中應用的并不多,大家可以當做特殊情況對待即可,或者直接忽略掉也行……
6總結
    其實sizeof的作用就是告訴我們分配給變量的“建筑面積”的大小,只要記得這一點應該就夠了,不管這個變量類型是普通的整型數據,還是結構體,共用體,枚舉……記住這一點后,當我們再去想知道sizeof對不同數據類型操作返回的值到底是什么的時候,只需搞明白那些數據類型到底要消耗多少“建筑面積”就可以啦!

strlen()函數
C庫函數 size_t strlen(const char *str) 計算字符串str的長度,但不包括終止空字符。

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

size_t strlen(const char *str)

參數
str -- 這是字符串的長度要計算的。

返回值
這個函數返回字符串的長度。

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

#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);}

讓我們編譯和運行上面的程序,這將產生以下結果:

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


sizeof與strlen的用法區別
1. sizeof操作符的結果類型是size_t,它在頭文件中typedef為unsigned int類型。該類型保證能容納實現所建立的最大對象的字節大小。

2. sizeof是運算符(C++ 關鍵字),strlen是函數。

3. sizeof可以用類型做參數,strlen只能用char*做參數,且必須是以”/0”結尾的。sizeof還可以用函數做參數,比如:

short f();printf("%d/n", sizeof(f()));

輸出的結果是返回值的類型的大小, 即sizeof(short)=2。

4. 數組做sizeof的參數不退化,傳遞給strlen就退化為指針了。大部分編譯程序在編譯的時候就把sizeof計算過了,是類型或是變量的長度,這就是sizeof(x)可以用來定義數組維數的原因。

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

而strlen的結果要在運行的時候才能計算出來,是用來計算字符串的長度,不是類型占內存的大小。

5. sizeof后如果是類型必須加括弧,如果是變量名可以不加括弧。這是因為sizeof是個操作符不是個函數。

6. 當適用了于一個結構類型時或變量, sizeof 返回實際的大小,當適用一靜態地空間數組, sizeof 得到全部數組的尺寸。sizeof 操作符不能返回動態地被分派了的數組或外部的數組的尺寸。

7. 數組作為參數傳給函數時傳的是指針而不是數組,傳遞的是數組的首地址,如:

fun(char [8])fun(char [])

都等價于 fun(char *)。

在C++里參數傳遞數組永遠都是傳遞指向數組首元素的指針,編譯器不知道數組的大小。如果想在函數內知道數組的大小, 需要這樣做:

進入函數后用memcpy拷貝出來,長度由另一個形參傳進去

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

sizeof對指針的話,結果是相應的類型:

char* ss = "0123456789";sizeof(ss)

結果是4 => ss是指向字符串常量的字符指針,sizeof 獲得的是一個指針的之所占的空間,應該是長整型的,所以是4. sizeof(*ss) 結果 1, => *ss是第一個字符,其實就是獲得了字符串的第一位“0” 所占的內存空間,是char類型的,占了1個字節,strlen(ss)= 10 >>>> 如果要獲得這個字符串的長度,則一定要使用 strlen.



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av在线精品| 日韩精品极品毛片系列视频| 91网站免费观看| 日韩欧美在线视频| 国产精品美女网站| 亚洲风情亚aⅴ在线发布| 国产欧美一区二区三区在线看| 亚洲精品久久久久久下一站| 精品偷拍一区二区三区在线看| 国产精品美女久久久免费| 狠狠色噜噜狠狠狠狠97| 国产精品丝袜一区二区三区| 欧美日韩裸体免费视频| 亚洲欧美综合精品久久成人| 97香蕉久久超级碰碰高清版| 亚洲美女av网站| 久久69精品久久久久久久电影好| 91在线网站视频| www.欧美免费| 国产v综合ⅴ日韩v欧美大片| 欧美日韩国产一中文字不卡| 欧美成人精品一区二区| 亚洲成人精品视频| 久久国产精品99国产精| 丝袜亚洲另类欧美重口| 95av在线视频| 91精品啪aⅴ在线观看国产| 欧美亚洲第一页| 91免费的视频在线播放| 成人免费视频xnxx.com| 欧美在线日韩在线| 欧美专区日韩视频| 91精品国产综合久久香蕉最新版| 欧美激情中文字幕在线| 亚洲 日韩 国产第一| 欧美大尺度电影在线观看| 日韩高清av在线| 国产精品欧美一区二区三区奶水| 欧美激情一区二区三区久久久| 视频在线观看一区二区| 久热精品视频在线免费观看| 在线观看日韩欧美| 国产日韩在线免费| 亚洲色图17p| 久久综合久久美利坚合众国| 欧美一级淫片videoshd| 国产福利视频一区二区| 国产欧美精品在线播放| 国产国语刺激对白av不卡| 一本色道久久综合狠狠躁篇的优点| 久久在线免费观看视频| 久久久久久久电影一区| 韩剧1988在线观看免费完整版| 国产精品视频中文字幕91| 88国产精品欧美一区二区三区| 国产欧美欧洲在线观看| 奇米4444一区二区三区| 日韩在线国产精品| 91精品国产91久久久久久不卡| 久久久精品一区二区三区| 在线丨暗呦小u女国产精品| 午夜精品久久久久久99热| 亚洲第一福利视频| 韩国三级日本三级少妇99| 91色p视频在线| 亚洲直播在线一区| 欧美激情精品久久久久久久变态| 欧美亚洲在线视频| 欧美日本在线视频中文字字幕| 亚洲一区二区三区xxx视频| …久久精品99久久香蕉国产| 亚洲男人天堂古典| 91精品国产综合久久久久久蜜臀| 26uuu亚洲国产精品| 日韩中文字幕在线免费观看| 久久久精品一区二区三区| 久久精品电影一区二区| 精品国产乱码久久久久酒店| 在线观看成人黄色| 国产69久久精品成人看| 国产精品v日韩精品| 91成人免费观看网站| 国产精品高清网站| 亚洲精品久久久久久久久久久久久| 91精品视频在线免费观看| 日韩av电影国产| 久久久久久噜噜噜久久久精品| 精品久久在线播放| 91久久久国产精品| 日韩一区在线视频| 国产一区二区三区网站| 日韩大片免费观看视频播放| 久久久久久久一区二区三区| 国产精品第一区| 91精品久久久久久久久久久久久| 欧美日韩一区二区精品| 热久久美女精品天天吊色| 亚洲aⅴ日韩av电影在线观看| 992tv成人免费影院| 成人有码在线视频| 性欧美xxxx视频在线观看| 日韩免费视频在线观看| 亚洲国产精品久久精品怡红院| 久久久免费在线观看| 韩国精品美女www爽爽爽视频| 欧美精品18videosex性欧美| 国产精品男女猛烈高潮激情| 日本精品视频在线观看| 欧美大学生性色视频| 国产精品igao视频| 欧美日韩成人免费| 国产成人欧美在线观看| 欧美激情亚洲国产| 国产成人精品在线视频| 国产成人精品一区| 国产精品久久久久久久电影| 日韩高清免费在线| 97在线日本国产| 国产欧美日韩精品在线观看| 久久免费视频这里只有精品| 午夜精品一区二区三区在线视| 精品丝袜一区二区三区| 欧美日韩激情视频| 欧美性高跟鞋xxxxhd| 久久久久久97| 夜夜嗨av色一区二区不卡| 欧美午夜影院在线视频| 国外视频精品毛片| 国产精品久久久一区| 欧美福利小视频| 国产精品永久免费观看| www.国产精品一二区| 91av在线播放视频| 26uuu日韩精品一区二区| 亚洲国产精品电影| 欧美激情综合色综合啪啪五月| 91午夜在线播放| 久久久精品国产网站| 久久久久久亚洲精品不卡| 色哟哟入口国产精品| 亚洲欧美精品一区| 91在线观看免费观看| 欧美日韩中文字幕在线视频| 国产精品无码专区在线观看| 亚洲人午夜色婷婷| 色爱av美腿丝袜综合粉嫩av| 激情久久av一区av二区av三区| 成人国产精品av| 欧美精品亚州精品| 欧美日韩视频免费播放| 91精品免费看| 中文字幕日韩在线播放| 欧美国产日韩xxxxx| 少妇高潮久久久久久潘金莲| 亚洲欧美另类国产| 国产区精品视频| 日韩av电影在线免费播放| 国产精品中文字幕在线观看| 91在线免费观看网站| 欧美成人午夜剧场免费观看| www.xxxx精品| 国产日韩精品在线观看| 亚洲国产精品电影在线观看| 国产91色在线|免|