为什么可以用括号表示带有后缀运算符的解引用指针并仍然获得先前的解引用值?

joh*_*nny 1 c++ pointers pointer-arithmetic

我不明白这里的优先顺序.鉴于:

*(p++)
Run Code Online (Sandbox Code Playgroud)

以下是我认为会发生的事情:

(p++)
Run Code Online (Sandbox Code Playgroud)

然后

*p
Run Code Online (Sandbox Code Playgroud)

为什么不是p首先递增的地址,然后取消引用,因为后缀在括号中?

*(p++)
Run Code Online (Sandbox Code Playgroud)

为什么地址不会增加,然后由于括号而被解除引用.

*p++似乎并不相同*(p++),但它们是相同的.

Jon*_*ler 6

*(p++),in 的值p增加p++,但结果p++是增量前的值,并*应用于增量前的值.括号是多余的 - 可以说是某人不确定语言的标志.

如果要取消引用递增的值,则需要预先递增:

*(++p)
*++p
Run Code Online (Sandbox Code Playgroud)

请注意,如果要增加p点数,可以使用:

(*p)++
++*p
++(*p)
Run Code Online (Sandbox Code Playgroud)

最后两个是相同的,只是拼写不同.括号在这三个中的第一个是必要的; *p++*(p++)不是(*p)++.