看到“深入理解 sizeof ”,我只能呵呵。 sizeof 也需要深入? 如果要深入那也是 c/c++ 的型別系統, sizeof 真的是“短的不能再短”了。sizeof 是一個運算子,編譯期求一個型別 sizeof(int) 或是一個表示式 size(++i) 的型別的長度!重點: (1) 運算子,非函式; (2) 編譯期求值,所以 sizeof 的結果是常量; (3) 求的是型別的長度,表示式是不需要求值的!sizeof(4) == sizeof(i) == sizeof(++i) == 4 ,為什麼是 4! 因為(某編譯器)一開始就規定的 int 是 4 個位元組呀,混蛋!補充:(4) c/c++ 識別符號 先聲明後使用 + 靜態型別 意味著: 任何一個表示式 (*p++)[0]->a 本身從宣告和解析上就能知道型別,不需要計算出結果才知道呀,哎喲喂!!所以回到題目的問題:第2個問題: sizeof(++i) 中 i 值為什麼沒有 +1 , 表示式都沒有執行! sizeof(++i) 和 sizeof(i) 和 sizeof(int) 沒有區別!第1個問題: sizeof("123456789") 為什麼是 10 ? 因為 "123456789" 的型別是 const char[10] !(注意 "123456789"後面有一個默默無聞的 "\0" 字元) 這是一個 10 個字元的陣列型別, sizeof(const char[10]) == sizeof(char)*10,所以是10 !至於為什麼 "123456789" 的型別是 const char[10], 那不是 sizeof 的問題,是 c/c++ 型別系統就是這麼規定的!sizeof("12345689"+1) == 10 ???!!!! 如果結果是 10, 只能說編譯器有問題吧 !"123456789"+1 的型別是 char*, 所以 sizeof("123456789"+1) == sizeof(char*) == sizeof(int*) == 4 or 8 !!!(10 不能說不對, 但是感覺略奇葩,就像 c 中 sizeof(char) 其實可以不等於 1, 一個位元組可以不是 8 bit 一樣! )這裡就不得不提 c/c++ 中的型別轉換, 除了 sizeof 和 & 一個數組 T[N] 之外譬如 sizeof(char[5]), 其他時候陣列型別 T[N] 都隱式轉換為 T* , so, "123456789"+1 的型別是 char* !c/c++ 的型別以及型別轉換這裡省略一篇作文的長度,%>_<%
看到“深入理解 sizeof ”,我只能呵呵。 sizeof 也需要深入? 如果要深入那也是 c/c++ 的型別系統, sizeof 真的是“短的不能再短”了。sizeof 是一個運算子,編譯期求一個型別 sizeof(int) 或是一個表示式 size(++i) 的型別的長度!重點: (1) 運算子,非函式; (2) 編譯期求值,所以 sizeof 的結果是常量; (3) 求的是型別的長度,表示式是不需要求值的!sizeof(4) == sizeof(i) == sizeof(++i) == 4 ,為什麼是 4! 因為(某編譯器)一開始就規定的 int 是 4 個位元組呀,混蛋!補充:(4) c/c++ 識別符號 先聲明後使用 + 靜態型別 意味著: 任何一個表示式 (*p++)[0]->a 本身從宣告和解析上就能知道型別,不需要計算出結果才知道呀,哎喲喂!!所以回到題目的問題:第2個問題: sizeof(++i) 中 i 值為什麼沒有 +1 , 表示式都沒有執行! sizeof(++i) 和 sizeof(i) 和 sizeof(int) 沒有區別!第1個問題: sizeof("123456789") 為什麼是 10 ? 因為 "123456789" 的型別是 const char[10] !(注意 "123456789"後面有一個默默無聞的 "\0" 字元) 這是一個 10 個字元的陣列型別, sizeof(const char[10]) == sizeof(char)*10,所以是10 !至於為什麼 "123456789" 的型別是 const char[10], 那不是 sizeof 的問題,是 c/c++ 型別系統就是這麼規定的!sizeof("12345689"+1) == 10 ???!!!! 如果結果是 10, 只能說編譯器有問題吧 !"123456789"+1 的型別是 char*, 所以 sizeof("123456789"+1) == sizeof(char*) == sizeof(int*) == 4 or 8 !!!(10 不能說不對, 但是感覺略奇葩,就像 c 中 sizeof(char) 其實可以不等於 1, 一個位元組可以不是 8 bit 一樣! )這裡就不得不提 c/c++ 中的型別轉換, 除了 sizeof 和 & 一個數組 T[N] 之外譬如 sizeof(char[5]), 其他時候陣列型別 T[N] 都隱式轉換為 T* , so, "123456789"+1 的型別是 char* !c/c++ 的型別以及型別轉換這裡省略一篇作文的長度,%>_<%