【发布时间】:2016-04-30 15:18:48
【问题描述】:
我在 C 中实现了一个 AVL 树。直到后来我才读到指针比较仅在同一数组中的对象之间有效。在我的实现中,我进行了某些相等性测试。例如,为了测试一个节点是否是父节点的右子节点,我可以测试node==node->parent->right。但是,节点是根据需要分配的,而不是在一个连续的块中。是否定义了这种行为?如果不是,您将如何编写此代码?
【问题讨论】:
-
t 指针比较只在同一数组中的对象之间有效 - 你从哪里读到这个废话?
-
它可能是指小于或大于比较。也许你可以提供你读到的地方的报价?
-
您可以对任意两个指针使用小于、大于。是否有意义是另一回事
-
@M.M - 未定义的行为如何?指针本质上是表示内存中位置的数字
-
对于相等和不相等,标准(ISO/IEC 9899:2011 §6.5.9)说:两个指针比较相等当且仅当两者都是空指针,两者都是指向相同的对象(包括指向对象的指针和其开头的子对象)或函数,两者都是指向同一数组对象最后一个元素之后的指针,或者一个是指向一个数组对象末尾之后的指针,并且other 是指向不同数组对象的开头的指针,该数组对象恰好紧跟在地址空间中的第一个数组对象之后。比较不相关对象的指针时没有UB。
标签: c pointers dynamic-memory-allocation avl-tree