为什么++(*p)更改指针值
Why ++(*p) changes the pointer value?
如果我有这个代码:
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]’。
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 为什么++(*p)更改指针值
- C++取消引用指针.为什么会发生变化
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 为什么指针不写入类的地址?
- 为什么我们要为avl树实现返回一个指向节点的指针,而不是void函数
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 为什么要增加导致崩溃的指针
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 共享指针:为什么没有双免费
- 指向2D数组的指针(为什么起作用)
- 函数指针 - 为什么,什么时候我可以没有
- C++ 函数指针 -- 为什么会这样
- 不支持在c或c++中添加两个指针.为什么?
- 无效的指针-为什么
- 模板基类可以存储指向派生但不能存储对象的指针 - 为什么
- 在信号代码中将整数转换为函数指针-为什么这样做?
- 指向结构体作为函数参数的指针-为什么不更新其值