2012-04-04 54 views
1

通過一些文件上修改CGImageRef數據去,我遇到了一個奇怪的例子 - 它繼續沿着這條僞線的東西:Objective-C的指針作爲布爾

void *data = Allocate space for data; 
if (data != NULL) Manipulate data; 
if (data) Free data; 

這讓我想知道!布爾操作if (data != NULL)和布爾操作if (data)之間有什麼區別。

更具體地說,當它們被視爲布爾值時,指針在Objective C中的行爲如何?試圖谷歌這一點,我只發現有關指針- -booleans,而不是評估指針作爲布爾人的無數問題。

回答

5

它們完全一樣。任何類型的非零值在C中被解釋爲「真」,在Objective-C中被解釋爲「真」。 C甚至沒有布爾類型。

+0

哦,並且因爲NULL可以被看作是指向位置0的指針,所以它被評估爲false ...哎呀,謝謝! :) – 2012-04-04 06:18:29

+2

請不要將NULL看作任何類似「指向位置0的指針」的東西。這只是指向任何東西的指針的商定價值。當被迫成爲布爾值時,它等同於假。當你強制一個零指針,你會得到NULL。 – 2012-04-04 06:21:21

+0

@GeorgesOatesLarsen:空指針不一定是指向存儲器位置0。根據C時的參數,一個空指針被保證比較不等於任何有效的指針。在某些平臺上,內存位置0可能是有效的(例如,它可能是中斷處理程序表中的第一個條目)。然而,一個空指針轉換爲整數值0並從整數值0轉換,從而空指針被解釋爲一個假值。見C99,第6.3.2.3 3. – outis 2012-04-04 06:23:09