我不明白这里的先后顺序。给予:
*(p++)以下是我认为会发生的事情:
(p++)然后
*p为什么p的地址没有先递增,然后取消引用,因为后缀在括号中?
*(p++)为什么地址不增加,然后取消引用,因为括号。
*p++似乎与*(p++)不一样,但它们是相同的。
发布于 2015-01-09 18:02:50
在*(p++)中,p的值由p++递增,但p++的结果是增量之前的值,*应用于增量之前的值。括号是多余的,可以说是对语言不确定的人的标志。
如果要取消对增量值的引用,则需要预增量:
*(++p)
*++p请注意,如果要增加p所指向的值,请使用:
(*p)++
++*p
++(*p)最后两个是一样的,只是拼写不同。在这三个中的第一个中,括号是必需的;*p++是*(p++)而不是(*p)++。
发布于 2015-01-09 18:21:37
这与优先顺序无关。这是关于后缀增量是如何工作的。
在p++中发生的事情(假设p是这个简单示例的int* )是:
int* tmp = p;
p = p + 1;
return tmp; 因此,您正在取消对p的原始值的引用。
https://stackoverflow.com/questions/27866368
复制相似问题