gpt4 book ai didi

c++ - 为什么++(* p)更改指针值?

转载 作者:行者123 更新时间:2023-12-01 12:09:46 30 4
gpt4 key购买 nike

如果我有此代码:

int A[5] = { 2, 1, 3, 55 };
int *p = A;
cout << ++(*p);
结果是 3,而且 A的第一个位置的值也是 3,为什么?
我的意思是,按运算符的层次结构 ()++更具层次结构,那么我们首先需要对 *p进行操作:
++(*p) => ++(2) => 3 
A vector 有任何变化?

最佳答案

*p不仅是“2”,而且是一个左值,即此“2”具有明确定义的位置。
该位置的值由++运算符修改-通过++运算符的定义。
如果您不想修改该值,请改用+ 1:*p + 1

在C/C++中,左值是在内存中具有定义位置的值。该值可以更改-通过赋值,递增,递减。
例如,

int x = 0;
x = 1; // ok, x is an lvalue, assignment changes the value from 0 to 1

int *p = &x;
*p = 2; // ok, *p is an lvalue, assignment changes the value from 1 to 2
相反,右值是没有定义位置的值-例如,算术运算的结果。不能分配,递增或递减该值(这并不意味着它不能在较大的表达式中使用)。
例如,
int x = 0, y = 1;
(x + y) = 3; // compilation error, (x + y) is an rvalue

2++; // compilation error, 2 is an rvalue

这是一篇非常简单的文章,解释了左值/右值: https://eli.thegreenplace.net/2011/12/15/understanding-lvalues-and-rvalues-in-c-and-c

关于c++ - 为什么++(* p)更改指针值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62871627/

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