在c ++入门中,我发现了这个问题,本书解释了这个问题,因为增量运算符(++)优先于解析运算符(*),例如:
a=*p++;
等于:
a=*(p++);
但是为什么a等于p点的初始值而不是p ++点的值。在第二个编码中,我们知道括号的优先级是最高的,所以它应该首先执行p ++,然后执行解决方案到地址运算符,所以它应该在它改变地址后返回p指向的值。但事实并非如此。为什么?我不明白。
答案 0 :(得分:3)
但为什么a等于
p
的初始值?
因为p++
是帖子增量,它会在应用增量之前返回先前的p
值。因此,在a = *p++
中,a
被赋予p
在应用增量之前最初指向的值。
这与基本相同:
previous = p;
++p;
a = *previous;
括号不会影响到它。您可以在Operator Precedence中阅读更多内容。