考虑一下,我声明两个指针为NULL。然后,如果我比较它们,结果是真的。但是如果我们认为NULL是“什么都没有”那么我们怎么能说两个“nothings”是相等的呢?是出于某种特定原因吗?任何帮助赞赏。 :)
答案 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
0x0
是NULL
值的地址,即0.您无法访问0x0
内存地址。
(gdb) p *p
Cannot access memory at address 0x0
如果您尝试访问内存地址0x0
,那么程序将因segmentation fault
现在,如果你比较指向内存地址0x0
的两个指针,即NULL
,那么它只会与NULL
值默认为0
时相同