是.如果x>y那时&a[x] > &a[y],如果数组的两个元素都存在,或者a[x]是一个元素超过数组的末尾.否则行为未定义.
注意:我看到你的问题与我上面的答案相反.反之亦然:如果地址更大,则其索引更大,如果地址是整数个元素.通常编译器处理这个并且&a[x]+1是&a[x+1].编译器将+1第一个表达式转换为添加元素大小的字节数.
是的,这是有保证的.关于关系运营商的C标准第6.5.8p5节规定:
比较两个指针时,结果取决于指向的对象的地址空间中的相对位置. 如果两个指向对象类型的指针都指向同一个对象,或者两个指针都指向同一个数组对象的最后一个元素,则它们相等.如果指向的对象是同一聚合对象的成员,则指向稍后声明的结构成员的指针比指向结构中先前声明的成员的指针大, 指向具有较大下标值的数组元素的指针比指向同一数组的元素的指针大.具有较低的下标值.
指向同一个union对象的成员的所有指针都比较相等.如果表达式P指向数组对象的元素并且表达式Q指向同一数组对象的最后一个元素,则指针表达式Q + 1比P大.在所有其他情况下,行为未定义
因此,即使您有奇怪的内存布局,该语言也保证具有较高下标的数组元素的地址将比具有较低下标的数组元素的地址大.只要数组下标有效,比较就会成立.