为什么C中的空指针等于C中的另一个空指针?
问题描述:
像考虑我声明两个指针NULL。然后,如果我比较它们,结果是真实的。但是如果我们认为NULL是“无”,那么我们怎么能说两个“nothings”是平等的?那是出于某些特定的原因吗?任何帮助赞赏。 :)为什么C中的空指针等于C中的另一个空指针?
答
当您将指针指向NULL时,这意味着它指向的内存地址为0x0
。
考虑下面的例子中,
#include <stdio.h>
int main()
{
char *p = NULL;
..
..
这里,* P指向NULL
。如果我们在gdb
校验,那么我们将得到以下,
(gdb) p p
$1 = 0x0
0x0
是NULL
值即0的地址,则无法访问0x0
内存地址。
(gdb) p *p
Cannot access memory at address 0x0
如果您尝试访问说segmentation fault
现在,如果你比较它们指向的内存地址0x0
即NULL
然后两个指针的内存地址0x0
然后程序会崩溃这将是相同的只是作为NULL
默认值为0
答
在C中,任何类型的两个空指针保证比较相等。宏NULL
被定义为实现定义的空指针常量,其在C99
中可以可移植地表示为隐式地或显式地转换为类型void *
的整数值0。
因为只有_the_空指针。 – byxor
考虑我声明两个整数是'5'。如果我比较他们,他们是平等的。同样的想法适用于指针。 – byxor
“为什么”的问题很难在SO上回答。答案是“因为标准是这样说的”并不令人满意,“标准为什么这么说?”这个问题。需要对所有标准作者的个性和目标进行精神分析,并了解标准制定过程。 –