条件语句中的变量赋值

时间:2016-07-21 11:46:20

标签: c while-loop

我有一个代码:

while (i = j) {
  /* not important */
}

这个while循环有多长时间了?直到变量j的值等于零的那一刻?

3 个答案:

答案 0 :(得分:4)

对于while循环属性,引用C11,章节§6.8.5/ p4,(强调我的

  

迭代语句会导致重复执行一个称为循环体的语句   直到控制表达式等于0。 [...]

并考虑循环条件中的赋值,引用§6.5.16/ p3

  

[...] An   赋值表达式具有赋值后的左操作数的值, 111)但不是   一个左值。 [...]

因此,每次执行循环条件时,首先将j的当前值分配给i,然后i的值将被视为控制表达式值。

换句话说,循环将一直持续到j变为0

那说, iff 你确定赋值部分是循环条件语句,把它放到双括号中,如

 while ((i = j)){

减少编译器和下一个开发人员/维护者的困惑。

答案 1 :(得分:2)

  

这个while循环有多长时间了?直到变量j的值等于零的那一刻?

  • while循环可行,直到conditionexpression评估为 false (即{{ 1}})。

  • 在您的代码中, YES 0循环一直有效,直到变量while的值等于j

  

注意:C中的赋值运算符返回已赋值的变量的值,即表达式0 os的值等于i = j

  • j中,第一个while(i = j)被赋值为i,然后评估表达式 true false
  • 为什么不尝试一个简单的程序:)

    j
  • 输出

    #include <stdio.h>
    
    int main(void) 
    {
        int i = 0,j =10;
        while (i = j) 
        {
            printf("in loop when j = %d\n",j);
            j--;
        }
        printf("exited loop when j = %d",j);
    }
    

答案 2 :(得分:0)

赋值操作总是返回赋值的结果,因此循环将一直持续到j == 0,这种行为存在,因此您可以将许多赋值操作链接在一起,如下所示:

a = b = c;