sizeof與strlen的區別

sizeof運算符

  • sizeof爲一個操作符(operator),其作用是以字節爲單位返回一個對象或者類型的大小。

  • 返回值類型爲size_t,在頭文件stddef.h中定義。一般定義爲

typedef unsigned int size_t;
  • 語法形式爲

sizeof( object ); // sizeof( 對象 );
sizeof( type_name ); // type_name( 類型 );
  • 在32位計算機中,一個指針變量的sizeof值結果必定爲4,在64位系統中指針變量的sizeof結果爲8(對編譯器而言)。

  • 數組的sizeof值爲數組所佔用的內存字節數(數組作爲函數的形參時會退化爲指針)。

  • 結構體的sizeof值會發生字節對齊。


strlen函數

  • strlen(char*)求的是字符串的實際長度,方法是從開始一直到第一個'\0',不包括'\0'在內


理解 sizeof 只需要抓住一個要點:棧

程序存儲分佈有三個區域:棧、靜態和動態。能夠從代碼直接操作的對象,包括任何類型的變量、指針,都是在棧上的;動態和靜態存儲區是靠棧上的所有指針間接操作的。 sizeof 操作符,計算的是對象在棧上的投影體積;記住這個就很多東西都很清楚了。

char const * static_string = "Hello";
// sizeof(static_string) 是 sizeof 一個指針,所以在 32bit system 是 4 
    
char stack_string[] = "Hello";   
//sizeof(stack_string) 是 sizeof 一個數組,所以是 6 * sizeof(char)  
   
char * string = new char[6];   
strncpy(string, "Hello", 6");   
// sizeof(string) 是 sizeof 一個指針,所以還是 4。
// 和第一個不同的是,這個指針指向了動態存儲區而不是靜態存儲區。

不管指針指向的內容在什麼地方,sizeof得到的都是指針的棧大小

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章