问题:如果比较相等的指针,它们的整数转换值也相等吗?
例如:
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
它与实现可以将相同的指针转换为不同的值(取决于一些奇怪的情况)并保持转换回的值产生相同的指针并不矛盾。
所以,我认为不,比较相等的指针的整数转换值不一定彼此相等。
你的分析是正确的。除了允许在整数之间进行转换之外§6.3.2.3 https://port70.net/~nsz/c/c11/n1570.html#6.3.2.3,该标准没有提及该转换应该如何进行。当然,有一个“往返”要求intptr_t
,但它并不能阻止多于一次的旅行,编译器根据某些约束或要求选择一个或另一个。
所以确实,C 标准不需要(intptr_t) ptr1 == (intptr_t) ptr2
持有。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)