将C转换为C中的结构指针有什么好处?
例如:
typedef struct List
{
....
} List;
List *listPtr = ((List *) NULL) ;
PostgreSQL源代码示例:
#define NIL ((List *) NULL)
答案 0 :(得分:9)
在赋值示例中,显式强制转换没有任何有用的意义。但是,似乎您的问题实际上是关于#define NIL ((List *) NULL)
宏,其可用性超出了赋值范围。
可能有意义的地方是将它传递给可变函数或没有原型声明的函数。标准NULL
可以定义为0
或0L
或((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相比。