【发布时间】:2020-12-06 19:46:08
【问题描述】:
我知道指针(指向数组元素)和迭代器可以递增/递减以遍历一系列元素,并且可以在序列中来回跳转。
但是如果我增加一个指向单个对象的指针或添加一个整数值会发生什么?是未定义的行为还是可以但我们无法访问该内存?
int x = 551;
int* p = &x;
++p;
--p;
std::cout << *p << '\n';
因为我已经读过,我们不应该增加/减少不指向序列或数组中元素的指针。
那么有人可以解释会发生什么以及我的示例是否可以(取消引用指针 p)?谢谢!
【问题讨论】:
-
这是一个非常好的问题,因为编译器编写者越来越积极地利用未定义的行为规则,并且当您不小心绊倒极端情况时,会使代码产生完全不可预测的后果。
-
这不是一个很好的副本。它甚至没有涉及减法的情况,本来可以合理地(但实际上没有)以不同的方式处理。
-
@AsteroidsWithWings 是的,这很合理。这比另一个更一般。我会调整目标方向,谢谢。
标签: c++ pointers language-lawyer pointer-arithmetic