将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
可以定义为0
或0L
或((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相比。