假設a
是一個指針,併爲它分配內存後,我要檢查,如果內存已成功分配,我已經看到有兩種方法這樣做:在C中,條件是:「if(a!= NULL)」與條件「if(a)」相同嗎?
if(a != NULL)
if(a)
是什麼第一之間的差異和第二個陳述?
假設a
是一個指針,併爲它分配內存後,我要檢查,如果內存已成功分配,我已經看到有兩種方法這樣做:在C中,條件是:「if(a!= NULL)」與條件「if(a)」相同嗎?
if(a != NULL)
if(a)
是什麼第一之間的差異和第二個陳述?
(a!= NULL)返回與(a)相同的布爾值。 如果內容等於0,則if語句返回false,否則返回true。 NULL表示0,所以如果a == 0,那麼if返回false。 所以編譯器就是這樣。
希望它可以幫助你!
是條件:
if(a != NULL)
條件相同if(a)
?
它們達到相同的目的。唯一真正的區別在於可讀性。
他們的效果是一樣的,因爲他們會導致同樣的事情。
NULL
是一個宏,幾乎總是0,因此:
if(a != NULL)
等同於:
if(a != 0)
這是非常相似:
if(a)
,因爲它會檢查表達式a
的計算結果是否爲真。
所以,如果a
是一個指針,它們將是相同的。如果不是,那麼它將取決於如何定義NULL
(正如我所說的是almost always 0)。
根據c faq:
如果(p)是等同於如果(!p值= 0)
,這是一個比較上下文,所以 編譯器可以告訴(隱含的) 0實際上是一個空指針 常量,並使用正確的空指針值。這裏沒有涉及 的詭計;編譯器可以這樣工作,併爲兩個構造生成相同的代碼 。空指針 的內部表示並不重要。
他們最終會變成同樣的東西。 – Steve
NULL是一個通常定義爲0的宏,因此第一個表達式與(a!= 0)相同,第二個也檢查是否一個!= 0,所以它的編輯相同:通常是 –
是的,如果*'a' *是一個指針,如果'a'不是一個指針,取決於NULL的定義,它可能會不同。 –