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

标签 c++ c pointers

如果我有此代码:

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/

相关文章:

c - 使用 C 中的 fork 扫描目录并同时处理特定文件

C: 创建、传递和访问指向常量字符串的常量指针数组

c++ - 何时使用 C++ forward_list

c++ - 在 C++ 中动态调用静态 "constructor"

c++ - 如何在循环中更改 int 变量,如果可以,是否有更有效的方法?

c - 如何在 C99 中使用 struct 和 malloc

c - GLib 哈希表 - 指针

c - 将指针传递给函数值不会改变

c++ - 尝试在 C++ 中减少设计模式

c++ - C++避免将NULL比较为0