我不明白这里的优先顺序。给出:
*(p++)
以下是我认为会发生的事情:
(p++)
然后
*p
为什么p
的地址不会先增加,然后取消引用,因为后缀在括号中?
*(p++)
为什么地址不会增加,然后由于括号而取消引用。
*p++
似乎与*(p++)
不同,但它们是相同的。
答案 0 :(得分:6)
在*(p++)
中,p
的值增加p++
,但p++
的结果是增量前的值,*
}适用于增量前的值。括号是多余的 - 可以说是某人不确定语言的标志。
如果要取消引用递增的值,则需要预先递增:
*(++p)
*++p
请注意,如果您想增加p
分的值,请使用:
(*p)++
++*p
++(*p)
最后两个是相同的,只是拼写不同。括号在这三个中的第一个是必要的; *p++
为*(p++)
而不是(*p)++
。
答案 1 :(得分:2)
这与优先顺序无关。它是关于后缀增量如何工作的。
p ++中发生的事情(假设这个简单例子的p是int*
)是:
int* tmp = p;
p = p + 1;
return tmp;
所以你要取消引用p的原始值。