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得到的都是指針的棧大小