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

Why ++(*p) changes the pointer value?

本文关键字:指针 为什么      更新时间:2023-10-16

如果我有这个代码:

int A[5] = { 2, 1, 3, 55 };
int *p = A;
cout << ++(*p);

结果是3,而A的第一个位置的值也是3,为什么?

我的意思是,通过运算符的层次结构,()++更具层次性,那么我们需要首先操作*p

++(*p) => ++(2) => 3 

CCD_ 7矢量有变化吗?

*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

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

++(*p)++p[0]++A[0]相同,都更改数组的第一个元素。

为什么++(*p(更改指针值

没有。指针值是保存在p中的值。它被称为";地址";或";参考文献";。它不会改变。

值得注意的是,C++中"*"的过度使用通常会让新手感到困惑。

此处:

int *p = A;

"*"表示将p声明为可以存储内存地址(指针(的变量,并分配a的第一个位置的地址(与&(a[0](相同(。

此处:

++(*p)

"*"表示您正在查看"p"内容(取消引用"p"的地址,该地址与"A[0]"的地址相同(。然后"++"会增加反映两者的值。

只是为了确认,在这个赋值(int*p=A;(之后,打印'p'、'A'和'&A[0]’。