将NULL转换为C中的结构指针?

时间:2012-08-23 14:39:38

标签: c pointers casting struct

将C转换为C中的结构指针有什么好处?

例如:

typedef struct List
{
....
} List;

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

PostgreSQL源代码示例:

#define NIL                     ((List *) NULL)

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

3 个答案:

答案 0 :(得分:9)

在赋值示例中,显式强制转换没有任何有用的意义。但是,似乎您的问题实际上是关于#define NIL ((List *) NULL)宏,其可用性超出了赋值范围。

可能有意义的地方是将它传递给可变函数或没有原型声明的函数。标准NULL可以定义为00L((void *) 0)或以其他方式定义,这意味着可以在此类无类型的上下文中对其进行不同的解释。显式强制转换将确保将其正确解释为指针。

例如,这通常是无效的(行为未定义)

void foo();

int main() {
  foo(NULL);
}

void foo(List *p) {
  /* whatever */
}

替换呼叫时

foo(NIL);

使其有效。

答案 1 :(得分:4)

  

向C

中的结构指针转换NULL是否有任何好处

没有。应该简单地说:

List *listPtr = NULL;

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

答案 2 :(得分:4)

没有null为空,它可以为null,你可能会认为零是非常的,但只是花生与null相比。