最冤枉的關鍵字----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中得到的)