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

met*_*dos 7 c struct pointers casting

在C中向结构指针转换NULL有什么好处吗?

例如:

typedef struct List
{
....
} List;

List *listPtr = ((List *) NULL) ;
Run Code Online (Sandbox Code Playgroud)

PostgreSQL源代码示例:

#define NIL                     ((List *) NULL)
Run Code Online (Sandbox Code Playgroud)

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

AnT*_*AnT 10

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

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

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

void foo();

int main() {
  foo(NULL);
}

void foo(List *p) {
  /* whatever */
}
Run Code Online (Sandbox Code Playgroud)

同时替换呼叫

foo(NIL);
Run Code Online (Sandbox Code Playgroud)

使它有效.


Mar*_*ett 5

没有null就是null,它等于您获得的null,您可能会认为零实际上是null,但与null相比,这只是花生。

  • 那时,仍然有一些HHGTTG新一代的粉丝;-) (2认同)