[英]Casting NULL to a struct pointer in C?
在C中向結構指針轉換NULL有什么好處嗎?
例如:
typedef struct List
{
....
} List;
List *listPtr = ((List *) NULL) ;
PostgreSQL源代碼示例:
#define NIL ((List *) NULL)
在賦值示例中,顯式強制轉換沒有任何實用意義。 但是,似乎你的問題實際上是關於#define NIL ((List *) NULL)
宏,其可用性超出了賦值。
它可能有意義的地方是將它傳遞給可變函數或沒有原型聲明的函數。 標准NULL
可以定義為0
或0L
或((void *) 0)
或以其他方式定義,這意味着它可能在這種無類型的上下文中被不同地解釋。 顯式強制轉換將確保將其正確解釋為指針。
例如,這通常是無效的(行為未定義)
void foo();
int main() {
foo(NULL);
}
void foo(List *p) {
/* whatever */
}
同時替換呼叫
foo(NIL);
使它有效。
沒有null是null,它是null,你可能會認為零是相當null,但這只是花生與null相比。
將NULL轉換為C中的結構指針有什么好處
沒有。 應該簡單地說:
List *listPtr = NULL;
此外,如果對象具有靜態存儲(例如,像全局變量),則甚至不需要將其初始化為NULL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.