在一段代码中,我看到了这个未编译的表单:

while(p1>=str1)
 {
  *p2 = *p1;
  p1--;
  p2++;
}

而压缩的表单看起来像这样:
 while(p1>=str1)
 {
   *p2++ = *p1--;
 }

代码所做的就像在未编译的表单中清楚地显示的那样,它首先复制指针的内容,然后递增p2并递减p1,但是怎么可能给出这样的结果:在C中,++的优先级高于赋值运算符?我想可能有一些()运算符来强制执行这个操作,但在书中它是正确的。有人能解释一下吗?谢谢

最佳答案

优先级只影响代码的解析方式,即++所指的内容。这就是为什么:

*p2++ = *p1--;

相当于:
(*(p2++)) = (*(p1--));

但是++的语义是先计算到原始值,然后再增加值。因此,赋值将使用p1p2的旧值,然后在执行赋值之后,将递增和递减它们。

关于c - C中的优先级和关联性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11690374/

10-11 23:15
查看更多