gpt4 book ai didi

我们可以在 C 中将 (void *)0 称为空指针吗?

转载 作者:行者123 更新时间:2023-12-03 18:39:40 24 4
gpt4 key购买 nike

总结 C 标准,特别是 ISO/IEC 9899:201x §6.3.2.3 - 3 :
如果将指针与常量文字 0 进行比较,则这是检查指针是否为空指针的检查。这个 0 然后被称为空指针常量。 C 标准定义将 0 转换为 void * 类型既是空指针又是空指针常量。
现在,如果我们查看 (void *)0 ,它是一个指向 void 的地址(在这种情况下是非法的)。
通常我们可以将这样的地址转换为任何适当的指针数据类型并取消引用它,但即使在将其转换为其他指针类型之后,取消引用它也是非法的。
所以我的疑问是:
我们可以将 (void *)0 称为空指针,看看它的定义方式吗?
另请参阅以下代码:

void *pointer = NULL;
我现在叫它什么?空指针、空指针还是空指针?

最佳答案

What will i call it now ? A void pointer, a null pointer or a nullvoid pointer ?


在本声明中
void *pointer = NULL;
由于使用空指针常量对其进行初始化,因此声明了一个 void * 类型的指针,该指针是 null pointer
指向任何类型对象的指针都可以是空指针。
使用将零整数常量转换为 void * 是因为 void * 类型的指针可以隐式转换为任何其他对象指针
类型。使用 void * 类型的另一个优点是您不能取消引用该类型的指针,因为 void 类型始终是不完整的类型。
早期版本的 C 没有 void 类型。使用 void 类型代替了 char 类型。因此,例如在旧的 C 程序中,您可能会遇到以下内容
memcpy( ( char * )p1, ( char * )p2, n );

关于我们可以在 C 中将 (void *)0 称为空指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64424954/

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