【问题标题】:while(*s++=*t++) is equivalent to which expression?while(*s++=*t++) 等价于哪个表达式?
【发布时间】:2015-08-04 21:13:49
【问题描述】:

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

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

【问题讨论】:

    标签: c loops while-loop


    【解决方案1】:

    而(*s++=*t++)

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

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

    【讨论】:

      【解决方案2】:

      A.) 与 B.)

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


      C.) 与 B.)

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


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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-07
        • 2020-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多