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

标签 c pointers casting struct

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

例如:

typedef struct List
{
....
} List;

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

来自 PostgreSQL 源的示例:

#define NIL                     ((List *) NULL)

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

最佳答案

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

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

比如这个一般是无效的(behavior is undefined)

void foo();

int main() {
  foo(NULL);
}

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

同时用

替换调用
foo(NIL);

使其有效。

关于将 NULL 强制转换为 C 中的结构指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12094174/

相关文章:

c - 错误 : dereferencing pointer to incomplete type -CodeBlocks

C++ 创建一个每个节点超过 2 个字段的链表

c++ - 从 sockaddr * 转换为 sockaddr_in * 增加了所需的对齐方式

c++ - 从 unsigned long long 转换为 double ,反之亦然会改变值

将文本文件的数据转换为变量

c - gdbus 库名称是什么?技术找到它?

c - 指向带有 malloc 的 Scanf 的指针,不可预测的结果

regex - 在转换为数字之前使用正则表达式过滤字符串

C、Xcode 和内存

c - 在结构中将指针数组初始化为 NULL