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



>就像考虑我声明两个指针 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  

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

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

如果您尝试访问内存地址0x0则程序将通过说segmentation fault而崩溃

现在,如果您比较指向内存地址的两个指针0x0NULL,则它只会与默认情况下0NULL值相同

相关内容

  • 没有找到相关文章

最新更新