指针算术混淆

Pointer Arithmetic confusion

本文关键字:指针      更新时间:2023-10-16

我知道你可以给一个int加一个指针,减去两个指针,一个指针和一个int,但你能给一个指针加一个int吗。所以5+指针。

您可以,但有限制。指针算术只在数组中有效(或数组末尾后的1)。

以下是一些规则:

5.7加法运算符[expr.add]

5) […]如果指针操作数和结果都指向同一数组对象的元素,或者指向一个过去数组对象的最后一个元素,则评估不应产生溢出;否则,行为为未定义。

6) 当减去指向同一数组对象的元素的两个指针时,结果是两个数组元素的下标。[…]除非两个指针都指向同一数组对象的元素,或者超过数组对象的最后一个元素,则行为未定义。

粘贴到此处进行确认。

所以

int* x = new int;
int* y = new int;

可以,但是:

y-x;
x + 4;
y - 1;

或者甚至使用二进制比较运算符的比较都是未定义的行为。

然而,x+11+x是可以的(单个对象算作大小为1的数组)

在指针中添加int在语法上是可以的,但有很多问题需要注意,例如溢出错误。

理想情况下,您应该只在一个数组中执行此操作。