其實理解 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 得到的都是指標的棧大小
c++ 中對引用的處理比較特殊;sizeof 乙個引用得到的結果是 sizeof 乙個被引用的物件的大小;所以
struct o
; int main()
r 引用的是整個的 o 物件而不是指向 o 的指標,所以 sizeof r 的結果和 sizeof o 完全相同。
sizeof,strlen 使用總結
1.sizeof是一種操作符,對變數或者物件可以不加括號,但是型別,必須加括號 2.指標與陣列sizeof 使用 1 指標也屬於一種變數型別 32位作業系統下是4位元組,64位作業系統是8位元組 例1 char p int length1 sizeof p length1 4 或 length1 8...
sizeof strlen區別與聯絡
1.sizeof是運算子,strlen是函式,具體如下 sizeof strlen 標頭檔案 stddef.h 格式 1 sizeof object sizeof 物件 2 sizeof type name sizeof 型別 3 sizeof object sizeof 物件 功能 乙個物件或者型...
十六進製制,sizeof,strlen
今天看到了sizeof的問題,發現基礎有些都記不牢了,現在把它們都記下 一 函式說明 sizeof是運算子,strlen是函式 1.sizeof 標頭檔案 stddef.h格式 1 sizeof object sizeof 物件 2 sizeof type name sizeof 型別 3 size...