【发布时间】:2021-02-01 09:16:39
【问题描述】:
This 回答正确解释了空指针。在 Null Pointers 下的最后一段中,它说
如果底层架构有一个空指针值定义为地址 0xDEADBEEF,那么就由编译器来解决这个问题。
现在,如果某些架构在内部将 Null 指针值定义为非零。这些 if 语句如何有效。编译器如何处理它们?
if (!pointer)
if (pointer == NULL)
if (pointer == 0)
毕竟当一个空指针常量被分配给一个指针时,你会得到一个空指针,而一个空指针常量总是一个0 或一个(void *)0。进一步this 回答说
所以
0是一个空指针常量。如果我们将其转换为指针类型,我们将得到一个空指针,对于某些架构,它可能是非全位为零的。
我真的无法理解这个文字 0 在初始化为指针时如何变为非所有位为零。这不是简单的初始化吗?此外,如果我的空指针值非零,上述 3 个 if 语句如何检查空指针?我们不是将非零空指针值与0 文字进行比较吗?
【问题讨论】:
-
可能重复:Redefining NULL,但还是值得一读。
标签: c null compiler-construction literals null-pointer