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