比较两个空指针

use*_*241 2 c null pointers c99

C99 6.3.2.3/3 值为 0 的整型常量表达式,或此类转换为 void * 类型的表达式,称为空指针常量。55) 如果将空指针常量转换为指针类型,则生成的指针,称为空指针,保证与任何对象或函数的指针比较不相等。

它是否说两个空指针比较不相等?但他们确实:

int *a = 0;
int *b = 0;

assert(a == b); // true
Run Code Online (Sandbox Code Playgroud)

我想知道在这种情况下有什么不平等?

Jen*_*ens 5

您需要仔细阅读标准:空指针与任何指向对象函数的指针比较不相等。不能通过在对象上使用地址运算符(例如&foo)来生成空指针。任何函数指针都保证为非 NULL。将这两者放在一起意味着空指针永远不会与 ptr-to-object 或 ptr-to-function 进行比较。

澄清一下,比较不相等意味着这a == b是错误的(与相同的a != b是正确的)。

您引用的段落没有提及任何有关比较两个空指针的内容,但下一段却是:

将空指针转换为另一种指针类型会生成该类型的空指针。任意两个空指针比较相等。

比较相等则表示为a == b真(相同则为a != b假)。