指针算术混淆

时间:2013-02-16 00:19:27

标签: c++ pointers

我知道你可以添加一个指向int的指针,并减去两个指针,一个指针和一个int,但是你可以在指针中添加一个int。所以5 +指针。

2 个答案:

答案 0 :(得分:3)

您可以,但限制适用。指针算术仅在数组中有效(或者在数组末尾超过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的数组)

答案 1 :(得分:0)

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

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