【发布时间】:2019-10-23 22:51:34
【问题描述】:
我从last question 中删除了这个问题,因为我认为这是一个相当个人的问题。所以我在标准中找到了指针转换的段落,关于我的问题的段落是:
6.3.2.3
指针
1 指向 void 的指针可以转换为指向任何 对象类型。指向任何对象类型的指针都可以转换为 指向 void 并再次返回的指针;结果应比较相等 到原来的指针。
...
4 将空指针转换为另一种指针类型会产生 该类型的空指针。任何两个空指针都应该比较 相等。
现在它只声明
(originaltype*)((void*)ptr) == ptr
应该永远是真的,但是呢
(void*) ptr == ptr
没有明确说明这是对还是错。还是我误解了第 1 段?
【问题讨论】:
-
我怀疑
(void*) ptr == ptr与(void*) ptr == (void*) ptr相同,因为第二个操作数将被隐式转换为void*以便进行比较。虽然不是 100% 确定... -
我相信比较应该是真的除非
ptr是一个函数指针,在这种情况下标准不保证它。 -
嗯,这显然是真实的,或者未定义的行为。
标签: c pointers casting void-pointers pointer-conversion