为什么C中的空指针等于C中的另一个空指针?

时间:2016-12-06 05:51:46

标签: c pointers null

考虑一下,我声明两个指针为NULL。然后,如果我比较它们,结果是真的。但是如果我们认为NULL是“什么都没有”那么我们怎么能说两个“nothings”是相等的呢?是出于某种特定原因吗?任何帮助赞赏。 :)

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分: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

如果您尝试访问内存地址0x0,那么程序将因segmentation fault

而崩溃

现在,如果你比较指向内存地址0x0的两个指针,即NULL,那么它只会与NULL值默认为0时相同