gpt4 book ai didi

c - 指针:*p++ 作为左值和右值之间的区别

转载 作者:行者123 更新时间:2023-11-30 14:45:19 26 4
gpt4 key购买 nike

所以我对指针的一件事感到困惑。让我们看看这个:

*p++

我知道运算符++ 比运算符 * “更大”(抱歉,我不知道还能怎么说,我的母语不是英语)。因此,这意味着 *p++ 实际上被视为 *(p++)。所以让我困惑的是当 *p++ 用作左值和右值时不同的结果。例如:

如果我想对数组的所有元素求和,这会很好地工作(用作右值):

sum += *p++;

我的问题是为什么它首先发生 *p 然后是 p++,当++ 大于 * 时。为什么它不会先发生 p++,然后发生 *p。

但是如果我将它用作左值,它就会按照我的预期工作。例如:

*p++ = round(*p * 100) / 100;

首先发生 p++,然后这个新数字被赋予 *p。

为什么这两件事不同,当它用作右值和左值时,我的意思是我很困惑为什么这个例子与总和。

谢谢:)

最佳答案

Postfix ++ 比一元 * 具有更高的优先级,因此 *p++ 被解析为 *(p++)。换句话说,您将 * 应用于 p++结果

p++结果p 的当前值。作为副作用p 会增加 1。对于指针,这意味着 p 会更新为指向序列中的下一个对象。 IOW,如果你有这种情况:

+---+---+---+---+
| | | | |
+---+---+---+---+
^
+---+
|
+---+
p: | |
+---+

然后执行p++(或p = p + 1)后,您将得到:

+---+---+---+---+
| | | | |
+---+---+---+---+
^
|
|
+---+
p: | |
+---+

无论序列中对象的类型如何,都是如此,因此存储在 p 中的地址值可能会增加超过 1。

关于c - 指针:*p++ 作为左值和右值之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53123836/

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