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)
AnT*_*AnT 10
在赋值示例中,显式转换没有任何有用的意义.但是,似乎你的问题实际上是关于#define NIL ((List *) NULL)宏,其可用性超出了赋值.
它可能有意义的地方是将它传递给可变函数或没有原型声明的函数.标准NULL可以定义为0或0L或((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)
使它有效.