0

在代码段中,我看到了这种未压缩的形式:

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

而压缩的形式看起来像这样:

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

代码的作用就像以未压缩的形式清楚地显示,它首先复制指针的内容,然后递增 p2 并递减 p1,但是如果 ++ 优先级高于 C 中的赋值运算符,那怎么可能呢?我认为可能有一些 () 运算符来强制执行此操作,但在书中它是正确的。谁能解释一下?谢谢

4

3 回答 3

3

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

*p2++ = *p1--;

相当于:

(*(p2++)) = (*(p1--));

但是 的语义++是评估原始值,然后再增加值。p1因此赋值将使用and的旧值p2,然后在执行赋值后,将递增和递减它们。

于 2012-07-27T15:00:07.200 回答
1

p2++表达式产生p2和 not的值p2 + 1。递增操作是在序列点完成的。

于 2012-07-27T14:59:29.713 回答
1

++后缀--运算符在执行完它们所包含的语句后生效。优先级会影响标记的分组方式以及语句的语法树(我可能在这里使用了错误的词汇表)的生成方式。

基本上*p2++ = *p1--;相当于*p2 = *p1; p2 += 1; p1 -= 1;

不过,请注意后置和前缀运算符;我相信,做类似的事情p2 = p1++ * p1--;被认为是未定义的行为。

于 2012-07-27T15:01:01.047 回答