2017-10-19 108 views
6

假設a是一個指針,併爲它分配內存後,我要檢查,如果內存已成功分配,我已經看到有兩種方法這樣做:在C中,條件是:「if(a!= NULL)」與條件「if(a)」相同嗎?

if(a != NULL) 

if(a) 

是什麼第一之間的差異和第二個陳述?

+4

他們最終會變成同樣的東西。 – Steve

+0

NULL是一個通常定義爲0的宏,因此第一個表達式與(a!= 0)相同,第二個也檢查是否一個!= 0,所以它的編輯相同:通常是 –

+0

是的,如果*'a' *是一個指針,如果'a'不是一個指針,取決於NULL的定義,它可能會不同。 –

回答

0

(a!= NULL)返回與(a)相同的布爾值。 如果內容等於0,則if語句返回false,否則返回true。 NULL表示0,所以如果a == 0,那麼if返回false。 所以編譯器就是這樣。

希望它可以幫助你!

0

沒有功能差異;它們是相等的,它們都測試空指針。

任何偏好純粹是主觀的。只需使用你喜歡的或你的項目/組織中的同行程序員所遵循的內容。

+0

你能詳細說一下嗎? – Marievi

2

是條件:if(a != NULL)條件相同if(a)

它們達到相同的目的。唯一真正的區別在於可讀性。


他們的效果是一樣的,因爲他們會導致同樣的事情。

NULL是一個宏,幾乎總是0,因此:

if(a != NULL) 

等同於:

if(a != 0) 

這是非常相似:

if(a) 

,因爲它會檢查表達式a的計算結果是否爲真。

所以,如果a是一個指針,它們將是相同的。如果不是,那麼它將取決於如何定義NULL(正如我所說的是almost always 0)。

+1

你能否詳細說明一下? – Marievi

+0

肯定@Marievi,在我的路上。 – gsamaras

1

根據c faq

如果(p)是等同於如果(!p值= 0)

,這是一個比較上下文,所以 編譯器可以告訴(隱含的) 0實際上是一個空指針 常量,並使用正確的空指針值。這裏沒有涉及 的詭計;編譯器可以這樣工作,併爲兩個構造生成相同的代碼 。空指針 的內部表示並不重要。