在一段代码中,我看到了这个未编译的表单:
while(p1>=str1)
{
*p2 = *p1;
p1--;
p2++;
}
而压缩的表单看起来像这样:
while(p1>=str1)
{
*p2++ = *p1--;
}
代码所做的就像在未编译的表单中清楚地显示的那样,它首先复制指针的内容,然后递增p2并递减p1,但是怎么可能给出这样的结果:在C中,++的优先级高于赋值运算符?我想可能有一些()运算符来强制执行这个操作,但在书中它是正确的。有人能解释一下吗?谢谢
最佳答案
优先级只影响代码的解析方式,即++
所指的内容。这就是为什么:
*p2++ = *p1--;
相当于:
(*(p2++)) = (*(p1--));
但是
++
的语义是先计算到原始值,然后再增加值。因此,赋值将使用p1
和p2
的旧值,然后在执行赋值之后,将递增和递减它们。关于c - C中的优先级和关联性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11690374/