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

时间:2015-05-22 18:33:07

标签: c loops while-loop

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

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

2 个答案:

答案 0 :(得分:3)

A。)与B。)

B将始终复制第一个值,然后再检查结果是否为0 A将首先进行测试,如果结果为0,则在复制第一个值之前将停止。

<小时/> C。)与B。)

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

<小时/> D。)与B。) 复制一个值后,T递增,然后对T(下一个值)进行测试,而不是之前的T.

答案 1 :(得分:1)

而(* S ++ = * T ++)

  1. * t将被分配到* s
  2. * s将被检查为条件
  3. * s和* t将递增
  4. A,C:* s和* t的值只有在满足条件时才会改变并递增(原始代码至少增加1个)。 D:将被分配,但* t将在已经增加之后被检查(* s将在* s或* t递增之前被检查)。 B:将* t正确分配给* s,然后检查* s,然后再增加它。