我不太了解这种情况下的if语句如何工作。它评估x != 0语句,当不再适用时,它将z分配给y,然后将break分配给if语句?

int main()
{
    int x, y, z, i;
    x = 3;
    y = 2;
    z = 3;

    for (i = 0; i < 10; i++) {
        if ((x) || (y = z)) {
            x--;
            z--;
        } else {
            break;
        }
    }

    printf("%d %d %d", x, y, z);
}

最佳答案

让我们将其分解为更小的位。

  • if (x)if (x != 0)相同。如果是x != 0,那么您知道条件是true,因此您无需执行if的其他部分。
  • 如果第1部分是false,则y = zz分配给y并返回y的最终值。
  • 从第2点开始,我们可以理解if (y = z)等效于y = z; if (y != 0)


  • 因此,从第一点和第三点,我们可以理解:
    if ((x) || (y = z)) {
        doSomething();
    }
    else {
        doSomethingElse();
    }
    

    是相同的 :
    if (x != 0) {
        doSomething();
    }
    else {
        y = z;
        if (y != 0) {
            doSomething();
        }
        else {
            doSomethingElse();
        }
    }
    

    的确,虽然它不是特别易读的代码。

    关于c - 'if((x) || (y=z))'如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42680027/

    10-11 22:51
    查看更多