2013-07-08 65 views
2

據我所知,NULL實際上不是0.那麼比較指針與0或NULL有什麼區別? 進一步什麼應該是正確的用法。謝謝!將指針與0或NULL進行比較有什麼區別嗎?

+1

是否有任何理由使用'0'而不是'NULL'? – Gabe

+2

不,不是很好。最好的(在我看來)是不要使用或者只是使用!或者使用指針本身作爲控制表達式。 –

+4

http://stackoverflow.com/questions/1296843/what-is-the-difference-between-null-0-and-0 – dijkstra

回答

4

正確的用法是用NULL:這是更具可讀性(p = NULL - >你知道p是一個指針)

+6

「正確」在這裏有點強。這更多的是風格問題。即使NULL如果不爲零,也保證評估爲等效。 – lnafziger

+0

我在這裏看到錯誤的描述。可能發生NULL指針的二進制表示不包含全部0位,但即使如此,NULL = 0。 – glglgl

+0

好吧,我編輯了我的答案。 – nouney

3

在C,宏NULL被定義爲實現定義空指針常數,這在C99可以可移植地表示爲隱式或顯式轉換爲類型void*的整數值0。
在C++中,NULL是零的整數字面量(00L)傳統上一直傾向於表示空指針常量。

在與指針比較的情況下,編譯器會隱式地將0轉換爲NULL

0NULL進行比較總是安全的。

+2

「大多數編譯器在與指針進行比較的情況下會隱式地將0轉換爲NULL。」實際上,這是標準所要求的,所以它應該是「所有編譯器」。 –

+1

@DietrichEpp和Inafzier謝謝。我更新了聲明。 – banarun

-1

NULL不一定是0,只能用於指針。 NULL是一個通常定義爲(void *)0的宏,但並非總是如此。

這是一個指向內存中沒有位置的指針。

有一本非常好的新書,叫做Understanding And Using C Pointers。請閱讀那一個。

不要將它用於除指針之外的任何內容。

+0

'NULL == 0',總是,但不是它的二進制表示。 – glglgl

+0

與我寫的有什麼不同? NULL比較等於零,但實際上不一定爲0. – uchuugaka

+0

你的回答中沒有說NULL比較等於零。這是不同的。 – lnafziger

相關問題