gpt4 book ai didi

c++ - 是否对未指向序列未定义行为中的元素的指针递增/递减或添加整数值?

转载 作者:行者123 更新时间:2023-12-03 10:03:34 24 4
gpt4 key购买 nike

我知道指针(指向数组元素)和迭代器可以递增/递减以遍历元素序列,并且可以在序列中来回跳转元素。
但是如果我增加一个指向单个对象的指针或向它添加一个整数值会发生什么?这是未定义的行为还是可以但我们无法访问该内存?

int x = 551;
int* p = &x;
++p;
--p;
std::cout << *p << '\n';
因为我已经读过我们不应该增加/减少不指向序列或数组中元素的指针。
那么有人可以解释会发生什么以及我的示例是否正常(取消引用指针 p)?谢谢!

最佳答案

当指针算术应用于指向对象的指针时,该指针被认为指向只有一个元素的该对象类型的数组,如 standard 中所述。 .

An object that is not an array element is considered to belong to a single-element array for this purpose


在您的示例中,指针 p好像它指向 int arr[1] = {551}因此,相应的操作类似于应用于指向 arr 的指针。 .这意味着, ++p将使 p指向元素 arr[1](假设),和 --p将使 p再次指向第一个元素 arr[0]。因此,在最后,取消引用指针 p没问题,不会导致任何 UB。

关于c++ - 是否对未指向序列未定义行为中的元素的指针递增/递减或添加整数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65172368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com