【发布时间】:2019-05-20 21:17:33
【问题描述】:
问题:如果指针比较相等,它们的整数转换值是否也相等?
例如:
void *ptr1 = //...
void *ptr2 = //...
printf("%d", ptr1 == ptr2); //prints 1
是不是说(intptr_t) ptr1 == (intptr_t) ptr2也是1?
从务实的角度来说应该是对的。但考虑到标准在7.20.1.4(p1) 指定的内容:
下面的类型用属性指定有符号整数类型 任何指向
void的有效指针都可以转换为这种类型,然后 转换回指向void的指针,结果将比较相等 指向原始指针:intptr_t
这与实现可以将相同的指针转换为不同的值(取决于一些奇怪的情况)并不矛盾,保持转换回来的值产生相同的指针。
所以,我认为不,比较相等的指针的整数转换值不一定彼此相等。
【问题讨论】:
-
我无法想象两次以相同方式转换一个值会产生不同的结果。但我不能说我在任何地方都有证据。
-
这似乎是编译器会忽略的明显无操作,但只是推测
-
@yhyrcanus 我进行了一些实验,整数确实具有相同的值,但我想确定它是否符合计数。
-
在像 Intel 80286 这样的分段内存架构中,指向同一个对象的两个指针可能具有不同的值。
标签: c pointers language-lawyer