如果我有这个代码:
int A[5] = { 2, 1, 3, 55 };
int *p = A;
cout << ++(*p);
Run Code Online (Sandbox Code Playgroud)
结果是3并且第一个位置的A值3也是,为什么?
我的意思是,运算符()的层次结构比 层次结构更高++,那么我们首先需要操作*p:
++(*p) => ++(2) => 3
Run Code Online (Sandbox Code Playgroud)
A矢量有任何变化吗?
Ale*_*rov 19
*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
Run Code Online (Sandbox Code Playgroud)
相反,右值是没有定义位置的值——例如,算术运算的结果。这个值不能被赋值、递增或递减(这并不意味着它不能用于更大的表达式)。
例如,
int x = 0, y = 1;
(x + y) = 3; // compilation error, (x + y) is an rvalue
2++; // compilation error, 2 is an rvalue
Run Code Online (Sandbox Code Playgroud)
这是一篇解释左值/右值的非常简单的文章:https ://eli.thegreenplace.net/2011/12/15/understanding-lvalues-and-rvalues-in-c-and-c
的++(*p)是相同的++p[0]和++A[0]所有改变数组的第一个元素。
为什么 ++(*p) 改变指针值
它不是。指针值是保存在p. 它被称为“地址”或“参考”。它不会改变。