2012-08-23 48 views

回答

8

在賦值示例中,顯式類型轉換沒有用處。然而,你的問題似乎是#define NIL ((List *) NULL)宏,其可用性超出了任務範圍。

它可能有意義的一個地方是,當它將它傳遞給可變參數函數或不帶原型聲明的函數時。標準NULL可以被定義爲00L((void *) 0)或以某種其他方式,這意味着它可以在這樣的無類型的上下文中被不同地解釋。明確的轉換將確保它被正確解釋爲指針。

例如,這是通常無效(行爲未定義)

void foo(); 

int main() { 
    foo(NULL); 
} 

void foo(List *p) { 
    /* whatever */ 
} 

,同時用

foo(NIL); 

替換呼叫使它有效。

4

有用C

鑄造NULL的一個struct指針任何好處

沒有。它應該是簡單的:

List *listPtr = NULL; 

而且,如果對象具有靜態存儲(比方說,就像一個全局變量),你甚至都不需要把它初始化爲NULL。

4

沒有null爲空,它是null,你可能會認爲零是非常空,但這只是花生比null。

+1

還有一些HHGTTG粉絲在這個新一代呢;-) –

+0

哦,不,不幸的不是。根據「NULL」的定義,'sizeof(NULL)'可以從'1'變到'8'。 –

+0

@JensGustedt這只是我們的宇宙中NULL的表示形式。 –