將NULL轉換爲C中的結構指針有什麼好處嗎?將NULL投射到C中的結構指針?
例如:從PostgreSQL的源
typedef struct List
{
....
} List;
List *listPtr = ((List *) NULL) ;
實施例:
#define NIL ((List *) NULL)
http://doxygen.postgresql.org/pg__list_8h_source.html
將NULL轉換爲C中的結構指針有什麼好處嗎?將NULL投射到C中的結構指針?
例如:從PostgreSQL的源
typedef struct List
{
....
} List;
List *listPtr = ((List *) NULL) ;
實施例:
#define NIL ((List *) NULL)
http://doxygen.postgresql.org/pg__list_8h_source.html
在賦值示例中,顯式類型轉換沒有用處。然而,你的問題似乎是#define NIL ((List *) NULL)
宏,其可用性超出了任務範圍。
它可能有意義的一個地方是,當它將它傳遞給可變參數函數或不帶原型聲明的函數時。標準NULL
可以被定義爲0
或0L
或((void *) 0)
或以某種其他方式,這意味着它可以在這樣的無類型的上下文中被不同地解釋。明確的轉換將確保它被正確解釋爲指針。
例如,這是通常無效(行爲未定義)
void foo();
int main() {
foo(NULL);
}
void foo(List *p) {
/* whatever */
}
,同時用
foo(NIL);
替換呼叫使它有效。
鑄造NULL的一個struct指針任何好處有用C
沒有。它應該是簡單的:
List *listPtr = NULL;
而且,如果對象具有靜態存儲(比方說,就像一個全局變量),你甚至都不需要把它初始化爲NULL。
沒有null爲空,它是null,你可能會認爲零是非常空,但這只是花生比null。
還有一些HHGTTG粉絲在這個新一代呢;-) –
哦,不,不幸的不是。根據「NULL」的定義,'sizeof(NULL)'可以從'1'變到'8'。 –
@JensGustedt這只是我們的宇宙中NULL的表示形式。 –
這對我沒有任何意義。您可以將NULL分配給任何指針,而不進行任何轉換。 –