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

首頁 > 學院 > 開發設計 > 正文

深入理解sizeof

2019-11-14 12:48:58
字體:
來源:轉載
供稿:網友

摘自:http://www.vckbase.com/index.php/wv/789.html

由于最近面試碰到sizeof和strlen,被弄得糊里糊涂的,這里摘錄了一下,鞏固一下!

一、好首先看看sizeof和strlen在MSDN上的定義:

首先看一MSDN上如何對sizeof進行定義的:

sizeof Operator    sizeof exPRession    The sizeof keyWord gives the amount of storage, in bytes, associated with a variable or a type   (including aggregate types). This keyword returns a value of type size_t.    The expression is either an identifier or a type-cast expression (a type specifier enclosed in   parentheses).    When applied to a structure type or variable, sizeof returns the actual size, which may include   padding bytes inserted for alignment. When applied to a statically dimensioned array, sizeof   returns the size of the entire array. The sizeof operator cannot return the size of dynamically   allocated arrays or external arrays.  然后再看一下對strlen是如何定義的:
strlen    Get the length of a string.    Routine Required Header:  strlen <string.h>    size_t strlen( const char *string );  Parameter  string:Null-terminated string   Libraries  All versions of the C run-time libraries.    Return Value  Each of these functions returns the number of characters in string, excluding the terminal   NULL. No return value is reserved to indicate an error.    Remarks  Each of these functions returns the number of characters in string, not including the   terminating null character. wcslen is a wide-character version of strlen; the argument of   wcslen is a wide-character string. wcslen and strlen behave identically otherwise.  

二、由幾個例子說開去。

第一個例子:

char* ss = "0123456789";  sizeof(ss) 結果 4 ===》ss是指向字符串常量的字符指針  sizeof(*ss) 結果 1 ===》*ss是第一個字符    char ss[] = "0123456789";  sizeof(ss) 結果 11 ===》ss是數組,計算到/0位置,因此是10+1  sizeof(*ss) 結果 1 ===》*ss是第一個字符    char ss[100] = "0123456789";  sizeof(ss) 結果是100 ===》ss表示在內存中的大小 100×1  strlen(ss) 結果是10 ===》strlen是個函數內部實現是用一個循環計算到/0為止之前    int ss[100] = "0123456789";  sizeof(ss) 結果 400 ===》ss表示再內存中的大小 100×4  strlen(ss) 錯誤 ===》strlen的參數只能是char* 且必須是以''/0''結尾的    char q[]="abc";  char p[]="a/n";  sizeof(q),sizeof(p),strlen(q),strlen(p);  結果是 4 3 3 2        第二個例子:
class X  {  int i;  int j;  char k;  };  X x;  cout<<sizeof(X)<<endl; 結果 12 ===》內存補齊  cout<<sizeof(x)<<endl; 結果 12 同上  

第三個例子:

1.charszPath[MAX_PATH]

如果在函數內這樣定義,那么sizeof(szPath)將會是MAX_PATH,但是將szPath作為虛參聲明時(void fun(char szPath[MAX_PATH])),sizeof(szPath)卻會是4(指針大小)

三、sizeof深入理解。

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

2.sizeof是算符,strlen是函數。

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

1.shortf();2.printf("%d/n",sizeof(f()));

輸出的結果是sizeof(short),即2。

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

5.大部分編譯程序 在編譯的時候就把sizeof計算過了 是類型或是變量的長度這就是sizeof(x)可以用來定義數組維數的原因

1.charstr[20]="0123456789";2.inta=strlen(str);//a=10;3.intb=sizeof(str);//而b=20;

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

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

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

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

1.fun(char[8])2.fun(char[])

都等價于 fun(char *) 在C++里傳遞數組永遠都是傳遞指向數組首元素的指針,編譯器不知道數組的大小如果想在函數內知道數組的大小, 需要這樣做:進入函數后用memcpy拷貝出來,長度由另一個形參傳進去

1.fun(unsigedchar*p1, intlen)2.{3.unsignedchar* buf =newunsigned char[len+1]4.memcpy(buf, p1, len);5.}

有關內容見: C++ PRIMER?

10.計算結構變量的大小就必須討論數據對齊問題。為了CPU存取的速度最快(這同CPU取數操作有關,詳細的介紹可以參考一些計算機原理方面的書),C++在處理數據時經常把結構變量中的成員的大小按照4或8的倍數計算,這就叫數據對齊(data alignment)。這樣做可能會浪費一些內存,但理論上速度快了。當然這樣的設置會在讀寫一些別的應用程序生成的數據文件或交換數據時帶來不便。MS VC++中的對齊設定,有時候sizeof得到的與實際不等。一般在VC++中加上#pragma pack(n)的設定即可.或者如果要按字節存儲,而不進行數據對齊,可以在Options對話框中修改Advanced compiler頁中的Data alignment為按字節對齊。

11.sizeof操作符不能用于函數類型,不完全類型或位字段。不完全類型指具有未知存儲大小的數據類型,如未知存儲大小的數組類型、未知內容的結構或聯合類型、void類型等。如sizeof(max)若此時變量max定義為int max(),sizeof(char_v) 若此時char_v定義為char char_v [MAX]且MAX未知,sizeof(void)都不是正確形式

四、結束語

sizeof使用場合。

1.sizeof操作符的一個主要用途是與存儲分配和I/O系統那樣的例程進行通信。例如: 

1.void *mallocsize_t size), 2.size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream)。

2.用它可以看看一類型的對象在內存中所占的單元字節。

1.void * memsetvoid * s,int c,sizeof(s))

3.在動態分配一對象時,可以讓系統知道要分配多少內存。

4.便于一些類型的擴充,在windows中就有很多結構內型就有一個專用的字段是用來放該類型的字節大小。

5.由于操作數的字節數在實現時可能出現變化,建議在涉及到操作數字節大小時用sizeof來代替常量計算。

6.如果操作數是函數中的數組形參或函數類型的形參,sizeof給出其指針的大小。


上一篇:jquery 事件小結

下一篇:set容器

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩视频在线免费观看| 久久偷看各类女兵18女厕嘘嘘| 韩国国内大量揄拍精品视频| 亚洲欧美激情四射在线日| 欧美怡红院视频一区二区三区| 国产91精品久久久久久| 欧美亚洲日本网站| 国产日韩欧美一二三区| 久久免费视频在线观看| 一区二区国产精品视频| 国产裸体写真av一区二区| 日韩精品免费观看| 欧美日韩人人澡狠狠躁视频| 国语自产精品视频在线看| 日韩在线视频观看正片免费网站| 精品国模在线视频| 97久久超碰福利国产精品…| 亚洲最大福利网| 亚洲新声在线观看| 日韩免费在线免费观看| 97精品在线视频| 啊v视频在线一区二区三区| 国产一区二区三区毛片| 亚洲2020天天堂在线观看| 国产精品久久久久久久一区探花| 国产欧美亚洲精品| 国产成人精品a视频一区www| 亚洲网在线观看| 欧美视频不卡中文| 亚洲999一在线观看www| 色av吧综合网| 日韩高清不卡av| 日本伊人精品一区二区三区介绍| 91精品国产免费久久久久久| 亚洲毛片在线观看.| 爽爽爽爽爽爽爽成人免费观看| 亚洲aⅴ男人的天堂在线观看| 2019中文字幕在线免费观看| 日韩精品高清视频| 色综合久久天天综线观看| 国产区精品在线观看| 91免费在线视频网站| 国产欧美日韩综合精品| 欧美最猛黑人xxxx黑人猛叫黄| 色在人av网站天堂精品| 欧美乱妇高清无乱码| 成人黄色短视频在线观看| 亚洲性视频网址| 亚洲欧美成人在线| 欧美乱大交做爰xxxⅹ性3| 亚洲精品日韩激情在线电影| 欧美精品在线免费播放| 国产欧美一区二区三区四区| 亚洲精品福利资源站| 国产99久久精品一区二区永久免费| 亚洲成avwww人| 久久av.com| 一区二区欧美在线| 奇米4444一区二区三区| 亚洲国产另类久久精品| 欧美精品18videos性欧美| 中文字幕日韩视频| 色综合老司机第九色激情| 日韩视频在线观看免费| 国产精品流白浆视频| 成人黄色av免费在线观看| 日韩精品久久久久| 亚洲最大福利网| 欧美国产亚洲视频| 色综合久久精品亚洲国产| 欧美黑人巨大xxx极品| 久久精品色欧美aⅴ一区二区| 日韩免费在线电影| 国产精品扒开腿爽爽爽视频| 国产免费观看久久黄| 成人在线国产精品| 最近2019年中文视频免费在线观看| 亚洲精品短视频| 亚洲免费av网址| 亚洲国产精品系列| 91九色国产社区在线观看| 国产精品青草久久久久福利99| 亚洲电影免费观看高清完整版| 中文字幕久热精品视频在线| 91色视频在线导航| 国产精品自拍小视频| 国产精品中文在线| 亚洲精品国产精品国产自| 亚洲人在线观看| 久久精品这里热有精品| 欧美激情按摩在线| 久久久久久久久久久免费精品| 欧美一区二区三区免费观看| 国产精品久久久久久一区二区| 欧美在线观看网站| 欧美日韩国产丝袜美女| 亚洲一区二区三区777| 日韩中文在线中文网三级| 97av在线播放| 日本精品视频网站| 日韩在线免费av| 亚洲wwwav| 亚洲精品一区二区在线| 成人精品视频99在线观看免费| 成人亚洲欧美一区二区三区| 日韩中文字幕av| 黑人狂躁日本妞一区二区三区| 日韩精品久久久久久福利| 亚洲免费精彩视频| 日韩中文视频免费在线观看| 国产精品欧美久久久| yellow中文字幕久久| 色偷偷av一区二区三区乱| 国产精品视频久久| 欧日韩在线观看| 国产精品69精品一区二区三区| 欧美性猛xxx| 亚洲精品天天看| 亚洲毛片一区二区| 国产成人精品在线观看| 久久99久久亚洲国产| 欧美—级a级欧美特级ar全黄| 午夜精品视频网站| 久久久亚洲成人| 国产精品亚洲一区二区三区| 欧美激情视频网| 一区二区三区美女xx视频| 国内精品久久久久伊人av| 社区色欧美激情 | 91在线网站视频| 91高清免费视频| 欧美成人精品在线视频| 国产成人久久久精品一区| 91av国产在线| 日韩在线播放av| 国产精品亚洲综合天堂夜夜| 亚洲人成电影网站色xx| 在线色欧美三级视频| 亚洲欧美一区二区三区在线| 国产精品美女午夜av| 国内精品美女av在线播放| 亚洲成人激情在线| 亚洲精品国产精品国产自| 中文字幕久久精品| 亚洲欧美成人一区二区在线电影| 精品久久久久久久久中文字幕| 欧美另类暴力丝袜| 欧美日韩国产丝袜美女| 91高清在线免费观看| 这里只有精品在线播放| 色爱av美腿丝袜综合粉嫩av| 亚洲精品720p| 91热精品视频| 97色伦亚洲国产| 欧美一级大片视频| 青青在线视频一区二区三区| 丝袜亚洲欧美日韩综合| 91色p视频在线| 亚洲欧洲高清在线| 国产精品久久久久久亚洲调教| 国产精品99久久久久久人| 岛国av一区二区| 亚洲精品mp4| 欧美日韩成人在线播放|