欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
★對sizeof做一個(gè)總結,同時(shí)于strlen進(jìn)行比較,歡迎大家補充!★

對sizeof做一個(gè)總結,同時(shí)于strlen進(jìn)行比較,歡迎大家補充,如果能對大家有點(diǎn)點(diǎn)幫助是對我最大的支持。

--------------------------------------------------------------------------
首先看一MSDN上如何對sizeof進(jìn)行定義的:

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.
--------------------------------------------------------------------------

以下是我從CSDN上搜索sizeof關(guān)鍵字,進(jìn)行的部分總結(不是很詳細,歡迎補充,希望對大家有益)

首先看幾個(gè)例子
第一個(gè)例子
char* ss = "0123456789";
sizeof(ss)     結果 4    ===》ss是指向字符串常量的字符指針
sizeof(*ss)    結果 1    ===》*ss是第一個(gè)字符

char ss[] = "0123456789";
sizeof(ss)     結果 11   ===》ss是數組,計算到\0位置,因此是10+1
sizeof(*ss)    結果 1    ===》*ss是第一個(gè)字符

char ss[100] = "0123456789";
sizeof(ss)     結果是100 ===》ss表示在內存中的大小 100×1
strlen(ss)     結果是10  ===》strlen是個(gè)函數內部實(shí)現是用一個(gè)循環(huán)計算到\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

第二個(gè)例子
class X
{
int i;
int j;
char k;
};
X x;
cout<<sizeof(X)<<endl;  結果 12  ===》內存補齊
cout<<sizeof(x)<<endl;  結果 12  同上

第三個(gè)例子
char szPath[MAX_PATH]
如果在函數內這樣定義,那么sizeof(szPath)將會(huì )是MAX_PATH,但是將szPath作為虛參聲明時(shí)(void fun(char szPath[MAX_PATH])),sizeof(szPath)卻會(huì )是4(指針大小)


--------------------------------------------------------------------------

總結如下:
1.sizeof的結果 
sizeof操作符的結果類(lèi)型是size_t,它在頭文件中typedef為unsigned int類(lèi)型。該類(lèi)型保證能容納實(shí)現所建立的最大對象的字節大小。

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

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

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

5.大部分編譯程序 在編譯的時(shí)候就把sizeof計算過(guò)了 是類(lèi)型或是變量的長(cháng)度
這就是sizeof(x)可以用來(lái)定義數組維數的原因
char str[20]="0123456789";
       int a=strlen(str);           //a=10;
       int b=sizeof(str);          //而b=20;
      
6.strlen的結果要在運行的時(shí)候才能計算出來(lái),時(shí)用來(lái)計算字符串的長(cháng)度,不是類(lèi)型占內存的大小。

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

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

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

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

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

**************
*  歡迎補充  *
**************
-----------------------------------

總結一下sizeof的作用:
1.sizeof操作符的一個(gè)主要用途是與存儲分配和I/O系統那樣的例程進(jìn)行通信。
例如: 
  void *malloc(size_t size), 
  size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream)。
2.用它可以看看一類(lèi)型的對象在內存中所占的單元字節。
   void * memset(void * s,int c,sizeof(s))
3.在動(dòng)態(tài)分配一對象時(shí),可以讓系統知道要分配多少內存。
4.便于一些類(lèi)型的擴充,在windows中就有很多結構內型就有一個(gè)專(zhuān)用的字段是用來(lái)放該類(lèi)型的字節大小。
5.由于操作數的字節數在實(shí)現時(shí)可能出現變化,建議在涉及到操作數字節大小時(shí)用ziseof來(lái)代替常量計算。
6.如果操作數是函數中的數組形參或函數類(lèi)型的形參,sizeof給出其指針的大小。
**************
*  歡迎補充  *
**************
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Sizeof與Strlen的區別與聯(lián)系
C語(yǔ)言中sizeof與strlen區別
C語(yǔ)言中的sizeof操作符用法及和strlen的區別
關(guān)于sizeof(string)
char字符串數組與string之間的轉換,以及sizeof,strlen,length的區別
常用字符串長(cháng)度計算函數 - 游戲程序設計 - 云世界日志
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久