gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:15:56 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com