gpt4 book ai didi

c++ - 在整数数组上移动时指针如何工作

转载 作者:太空宇宙 更新时间:2023-11-04 05:40:37 25 4
gpt4 key购买 nike

我对以下代码有疑问。第 1 行可以重写为 *(p++) = *(p++)+123;
右边是我理解的 6+123 = 129。但是它如何分配给左手边呢?
*(p++) 在左侧有什么作用?谢谢!

    int a[] = {6,7,8,9,10};
int *p = a;
*(p++)+=123; //array 129 7 8 9 10 line 1
cout<<*p<<endl;// 7

*(++p)+=123;// array 129 7 131 9 10 line 2
cout<<*p<<endl;// 131

最佳答案

line 1 can be rewrite as *(p++) = *(p++)+123;

不,不能;这将增加 p 两次。它可以(大约)重写为

int & r = *p++;
r = r + 123;

而第 2 行更像是

++p;
*p = *p + 123;

But how does it assign to left hand side ? what does *(p++) works as left hand side ?

p++ 评估为一个临时保存 p 的旧值。 *(p++) 取消引用以提供可分配的 lvalue 引用对象 p 用于指向。 += 修改该对象。

(注意:我正在写关于 C++ 的文章,尽管您似乎在询问两种不同的语言。C 的答案可能非常相似,尽管一些标准术语可能有所不同。将来,请决定您使用哪种语言正在询问。)

关于c++ - 在整数数组上移动时指针如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20069115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com