C99 6.3.2.3/3整数常量表达式,其值为0或类似值 转换为void *类型的表达式称为空指针 constant.55)如果将空指针常量转换为指针 类型,保证结果指针,称为空指针 将不等与指向任何对象或函数的指针进行比较。
是否说两个空指针不相等?但他们这样做:
int *a = 0;
int *b = 0;
assert(a == b); // true
我想知道在这种情况下什么是不平等的?
答案 0 :(得分:3)
您需要仔细阅读标准:空指针与任何指向对象或函数的指针不相等。通过在对象上使用address-of运算符(例如&foo
),无法生成空指针。任何函数指针都保证不为NULL。总之,这两个暗示空指针永远不会比较等于ptr到对象或ptr到函数。
澄清一下, 比较不平等 表示a == b
为假(与a != b
相同)。
您引用的段落没有说明比较两个空指针,但下一段确实如此:
将空指针转换为另一种指针类型会产生该类型的空指针。 任何两个空指针都应该相等。
比较平等 表示a == b
为真(与a != b
相同)为假。)
答案 1 :(得分:1)
如果在解释声明时出错,请纠正我。
int main() {
void* a = (void *)0;
int* b; // pointer b is of different type to a
printf((a == b) ? "equal" : "not equal");
return 0;
}
结果:
not equal
声明,
If a null pointer constant is converted to a pointer type, the resulting pointer, called a null
pointer, is guaranteed to compare unequal to a pointer to any object or function.
说,两个指针可以比较相等,当且仅当它们都是空指针或同一个对象或函数的指针时,并且当你比较两个不同的指针类型时它们是不相等的。