天天看點

最冤枉的關鍵字----sizeof

最冤枉的關鍵字----sizeof

常年被人誤認為函數

       sizeof 是關鍵字不是函數,其實就算不知道它是否為 32 個關鍵字之一時,我們也可以

借助編譯器确定它的身份。看下面的例子:

       int i =0;

      A),sizeof (in t); B),sizeof(i); C),size of int; D) ,size of i ;

      毫無疑問,32 位系統下 A),B)的值為 4 。那 C)的呢?D) 的呢?

      在 32 位系統下,通過 VisualC++6.0或任意一編譯器調試,我們發現 D)的結果也為 4 。

咦?si ze of 後面的括号呢?沒有括号居然也行,那想想,函數名後面沒有括号行嗎?由此輕

易得出 sizeof 絕非函數。

      好,再看 C)。編譯器怎麼怎麼提示出錯呢?不是說 sizeof 是個關鍵字,其後面的括号

可以沒有麼?那你想想 sizeof int 表示什麼啊?int 前面加一個關鍵字?類型擴充?明顯不

正确,我們可以在 int 前加 unsigned,const 等關鍵字但不能加 sizeof 。好,記住:sizeof 在

計算變量所占空間大小時,括号可以省略,而計算類型( 模子)大小時不能省略。一般情況下,

咱也别偷這個懶,乖乖的寫上括号,繼續裝作一個“函數”,做一個“披着函數皮的關鍵字”。

做我的關鍵字,讓人家認為是函數去吧。

in t * p = NULL;

sizeof(p)的值是多少?                             答案是4

sizeof(*p)呢?                                          答案是4

int a [100] ;

sizeof (a) 的值是多少?                           答案是400

sizeof(a[100])呢?                                    答案是4

sizeof(&a)呢?                                          答案是400

sizeof(&a[0])呢?                                      答案是4

(以上結果全部都在visual C++ 6.0中得到的)