将NULL转换为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转换为C中的结构指针有什么好处

没有。 应该简单地说:

 List *listPtr = NULL; 

此外,如果对象具有静态存储(例如,像全局变量),则甚至不需要将其初始化为NULL。

没有null是null,它是null,你可能会认为零是相当null,但这只是花生与null相比。