使用关系运算符比较指针

在比较两个指向同一类型的对象的指针时,结果由程序的地址空间中所指向的对象的位置决定。 也可以将指针与计算结果为 0 的常量表达式或 void * 类型的指针进行比较。 如果针对 void * 类型的指针执行指针比较,则另一个指针将隐式转换为 void * 类型。 然后进行比较。

不能比较两个类型不同的指针,除非:

  • 一个类型是派生自另一个类型的类类型。

  • 至少有一个指针显式转换(强制转换)为类型 void *。(对于该转换,另一个指针将隐式转换为类型 void *。)

两个指向同一对象的相同类型的指针一定是相等的。 如果比较两个指向对象的非静态成员的指针,则以下规则将适用:

  • 如果类类型不是联合,并且如果两个成员未通过 access-specifier(例如,公共、受保护的或私有)分隔开,则指向最后声明的成员的指针将大于指向之前声明的成员的指针。(有关 access-specifier 的信息,请参阅访问说明符中的“语法”一节。)

  • 如果两个成员通过 access-specifier 分隔开,则结果是不确定的。

  • 如果类类型是联合,则指向该联合中不同的数据成员的指针是相等的。

如果两个指针指向同一数组的元素或指向超出数组末尾 1 的元素,则指向带较高下标的对象的指针会更高。 仅当指针引用同一数组中的对象或超出数组末尾 1 的位置时,才能保证指针比较有效。

请参见

参考

使用二元运算符的表达式