将两个点中的哪一个与数组的两个条目中的哪一个进行比较是否有意义?

时间:2014-04-06 19:29:48

标签: c

在C中,我有一个数组int A[20]。我有两个指针int *piint *pj分别指向两个条目A[i]A[j]。我不知道ij。我想知道i > jj<ii==j

我的想法是通过比较基于pipj的{​​{1}}和pi = A + i来做到这一点。我想知道pj=A+j当且仅当i > jpi>pj当且仅当i == j时是否正确?谢谢!

2 个答案:

答案 0 :(得分:4)

是的,指针上的<>运算符被定义为以这种方式工作。

对于未指向同一对象或仅仅指向其末尾的指针,<>的行为未定义。不过,==!=定义明确。

参考:N1570 6.5.8,第5段:

  

当比较两个指针时,结果取决于相对值   指向的对象的地址空间中的位置。如果两个   指向对象类型的指针既指向同一个对象,也指向两个指向   一个超过同一个数组对象的最后一个元素,他们进行比较   等于。如果指向的对象是同一聚合的成员   对象,稍后声明的结构成员的指针比较大   而不是指向结构中先前声明的成员的指针,和   指向具有较大下标值的数组元素的指针   大于指向同一数组元素的指针   下标值。指向同一个union对象的成员的所有指针   比较平等。如果表达式 P 指向的元素   数组对象和表达式 Q 指向的最后一个元素   相同的数组对象,指针表达式 Q+1 进行比较   比...更棒   的 P 即可。在所有其他情况下,行为未定义。

答案 1 :(得分:2)

是的,这是一个有效的比较。如果

pi = &A[i] = A + i

pj = &A[j] = A + j

然后确实

(pi < pj) == (i < j)