gpt4 book ai didi

c - 比较相等的两个指针是否转换为整数类型比较相等?

转载 作者:太空狗 更新时间:2023-10-29 17:15:32 24 4
gpt4 key购买 nike

问题:如果指针比较相等,它们的整数转换值是否也相等?

例如:

void *ptr1 = //...
void *ptr2 = //...
printf("%d", ptr1 == ptr2); //prints 1

这是否意味着 (intptr_t) ptr1 == (intptr_t) ptr2 也是 1

从实用的角度说应该是对的。但考虑到标准在 7.20.1.4(p1) 中指定的内容:

The following type designates a signed integer type with the property that any valid pointer to void can be converted to this type, then converted back to pointer to void, and the result will compare equal to the original pointer:

    intptr_t

这与一个实现可以将相同的指针转换为不同的值(取决于一些奇怪的情况)并不矛盾,并保留转换回的值产生相同的指针。

所以,我认为不,比较相等的指针的整数转换值不一定彼此相等。

最佳答案

您的分析是正确的。除了允许在 §6.3.2.3 处与整数进行相互转换之外,该标准没有提及该转换的行为方式。诚然,intptr_t 有一个“往返”要求,但它并不能阻止不止一次旅行的可能,编译器会根据某些约束或要求选择一个或另一个。

所以确实,C 标准不需要 (intptr_t) ptr1 == (intptr_t) ptr2 来保持。

关于c - 比较相等的两个指针是否转换为整数类型比较相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56228289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com