【发布时间】:2013-05-14 13:33:02
【问题描述】:
§6.5.8\6(关于 >、=)
如果表达式 P 指向一个数组对象的元素并且 表达式 Q 指向同一个数组对象的最后一个元素, 指针表达式 Q+1 比较大于 P 。在所有其他情况下, 行为未定义。
上面的几个部分,第 6.5.8 节,解释了基本上,指针算术在数组上按预期工作。那就是int a[3]; int *p = a; int *q = &a[2]; //q-p == 3 是有效的。然而,当我读到上面的q > p 是UB。
我错过了什么?
【问题讨论】:
-
您错过了上一句之前的句子:“指向具有较大下标值的数组元素的指针比指向具有较低下标的同一数组元素的指针要大”。你引用的是一个例外,允许像 [
a,a+3) 这样的半开范围。 -
@DyP,哦,好吧。我不得不再读 5 遍才能理解它。另一个愚蠢的问题来自我的身边:(
-
这是标准,有些人声称这是困难和不直观的表述的标准;)
-
@DyP,哈哈。但是,您应该将此作为答案发布。双关语包容!
标签: c pointers language-lawyer c11