while(*s++=*t++) 等价于哪个表达式?

while(*s++=*t++) is equivalent to which expression?

A. while (*t) *s++ = *t++;
B. do { *s = *t++; } while (*s++);
C.while (*s) *s++ = *t++;
D. do { *s++ = *t++; } while (*t);

答案是B,为什么别人错了?

A​​.) 对比 B.)

B 在检查结果是否为 0 之前总是复制第一个值。
A 将首先进行测试,如果结果为 0,它将在复制第一个值之前停止。


C.) 与 B.)

与A类似,C先做测试,如果第一个值为0,则永远不会复制一个值。


D.) 与 B.) 复制一个值后,T 递增,然后针对 T(下一个值)而不是前一个 T 进行测试。

while(*s++=*t++)

  1. *t 将分配给 *s
  2. *s 将被检查为条件
  3. *s 和 *t 将递增

A, C: *s 和 *t 的值只有在满足条件的情况下才会改变和递增(原始代码中至少递增1)。 D:将被赋值,但*t 将在它已经增加后被检查(*s 将在*s 或*t 增加之前被检查)。 B: 会正确的把*t赋值给*s,然后检查*s,然后递增。