铸造NULL在C一个结构指针?(Casting NULL to a struct pointer i

2019-09-21 13:36发布

有铸造NULL来在C结构指针任何好处?

例如:

typedef struct List
{
....
} List;

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

从PostgreSQL源代码实例:

#define NIL                     ((List *) NULL)

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

Answer 1:

在分配例子中,明确投不作任何有用的意义。 然而,似乎你真正的问题是有关#define NIL ((List *) NULL)宏,它的实用性超出分配。

一个地方,它可能是有意义的是,当你把它传递给一个可变参数函数或者没有原型声明的函数。 标准NULL可以被定义为00L((void *) 0)或以某种其他方式,这意味着其可能在这种类型的无上下文有不同的解释。 显式类型转换将确保它被正确解释为指针。

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

void foo();

int main() {
  foo(NULL);
}

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

在更换与呼叫

foo(NIL);

使得它有效。



Answer 2:

没有空为空,这是因为空,你可以得到,你可能会认为零是相当空,但相较于零,这只是花生。



Answer 3:

有铸造NULL来在C结构指针任何好处

有没有。 它应该是简单的:

List *listPtr = NULL;

此外,如果对象具有静态存储(比方说,就像一个全局变量),你甚至都不需要把它初始化为NULL。



文章来源: Casting NULL to a struct pointer in C?