2016-12-06 93 views
0

像考虑我声明两个指针NULL。然后,如果我比较它们,结果是真实的。但是如果我们认为NULL是“无”,那么我们怎么能说两个“nothings”是平等的?那是出于某些特定的原因吗?任何帮助赞赏。 :)为什么C中的空指针等于C中的另一个空指针?

+0

因为只有_the_空指针。 – byxor

+1

考虑我声明两个整数是'5'。如果我比较他们,他们是平等的。同样的想法适用于指针。 – byxor

+3

“为什么”的问题很难在SO上回答。答案是“因为标准是这样说的”并不令人满意,“标准为什么这么说?”这个问题。需要对所有标准作者的个性和目标进行精神分析,并了解标准制定过程。 –

回答

2

当您将指针指向NULL时,这意味着它指向的内存地址为0x0

考虑下面的例子中,

#include <stdio.h> 

int main() 
{ 
     char *p = NULL; 
.. 
.. 

这里,* P指向NULL。如果我们在gdb校验,那么我们将得到以下,

(gdb) p p 
$1 = 0x0 

0x0NULL值即0的地址,则无法访问0x0内存地址。

(gdb) p *p 
Cannot access memory at address 0x0 

如果您尝试访问说segmentation fault

现在,如果你比较它们指向的内存地址0x0NULL然后两个指针的内存地址0x0然后程序会崩溃这将是相同的只是作为NULL默认值为0

6

在C中,任何类型的两个空指针保证比较相等。宏NULL被定义为实现定义的空指针常量,其在C99中可以可移植地表示为隐式地或显式地转换为类型void *的整数值0。