这就是 C 的方式 - 完整的解释在规范中,第 6.5.6 节加法运算符,第 8 段:
当一个整数类型的表达式被添加到指针或从指针中减去时,结果具有指针操作数的类型。如果指针操作数指向数组对象的元素,并且数组足够大,则结果指向与原始元素偏移的元素,使得结果和原始数组元素的下标之差等于整数表达式。换句话说,如果表达式P
指向数组对象的第i(P)+N
个元素,则表达式(等效地,N+(P)
)和(P)-N
(其中N
的值为n)分别指向第i + n个和i-<i>数组对象的第 n 个元素,前提是它们存在。此外,如果表达式P
指向数组对象的最后一个元素,则表达式(P)+1
指向数组对象的最后一个元素,如果表达式Q
指向数组对象的最后一个元素,则表达式(Q)-1
指向最后一个元素数组对象。如果指针操作数和结果都指向同一个数组对象的元素,或者超过数组对象的最后一个元素,则计算不应产生溢出;否则,行为未定义。如果结果指向数组对象的最后一个元素,则不应将其用作计算的一元运算符的操作数*
。
要将其与您对前缀++
运算符的使用联系起来,您还需要阅读第 6.5.3.1 节前缀增量和减量运算符,第 2 段:
前缀++
运算符的操作数的值递增。结果是递增后操作数的新值。表达式++E
等价于(E+=1)
。
还有第 6.5.16.2 节复合赋值,第 3 段:
op形式的复合赋值与简单赋值表达式 op 的不同之处仅在于左值只计算一次。E1
= E2
E1 = E1
(E2)
E1