>就像考虑我声明两个指针 NULL。然后,如果我比较它们,结果是正确的。但是,如果我们认为 NULL 是"无",那么我们怎么能说两个"无"是相等的呢?这是出于某种特定原因吗? 任何帮助表示赞赏。:)
在 C 中,任何类型的两个空指针保证比较相等。宏NULL
定义为实现定义的空指针常量,在C99
中可以可移植地表示为隐式或显式转换为类型void *
的整数值 0
当您将指针指向 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
,则它只会与默认情况下0
NULL
值相同