如果我有此代码:
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/