今天研究了一下sizeof,之前一直以為它是函數,因為它有參數也有返回值,不過今天發現sizeof實際上是一個...恩,算是運算符吧,或者說他是一個宏,因為他是在編譯時確定值的,而表達式中的任何運算和函數調用都不會發生。不過有一個例外是C99支持的不定長數組,這時會計算不定長數組的長度。
廢話少說,先看一段代碼,今天測試sizeof的時候發現的。
代碼運行的結果是
40
4
40
第一個結果不解釋了,就是數組所占的內存空間。
第三個結果也不解釋了,引用就表示數組本身,也是數組所占的內存空間。
關鍵來看一下第二個結果。在C語言中,數組名是被當成指針來處理的,具體來講數組名就是指向數組首元素地址的指針,因此,當數組名被當成參數傳遞到函數中時,數組名會自動轉變成指針,所以此時sizeof的結果就是指針所占的內存大小,在32位系統下就是4
另一個概念,C語言的編譯器遇到數組元素array[i],就會替換成*(array+i)的形式。