簡體   English   中英

將NULL轉換為C中的結構指針?

[英]Casting NULL to a struct pointer in C?

在C中向結構指針轉換NULL有什么好處嗎?

例如:

typedef struct List
{
....
} List;

List *listPtr = ((List *) NULL) ;

PostgreSQL源代碼示例:

#define NIL                     ((List *) NULL)

http://doxygen.postgresql.org/pg__list_8h_source.html

在賦值示例中,顯式強制轉換沒有任何實用意義。 但是,似乎你的問題實際上是關於#define NIL ((List *) NULL)宏,其可用性超出了賦值。

它可能有意義的地方是將它傳遞給可變函數或沒有原型聲明的函數。 標准NULL可以定義為00L((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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM