无法理解for循环条件中的赋值而不是逻辑比较

时间:2015-05-28 09:57:48

标签: for-loop

for循环内的程序中,有一个赋值语句而不是逻辑比较。

该计划说:

void main()
{
  int i, j=6;
  for(; i=j; j-=2)
  {
      printf("%d",j );
  }
}

输出是:

  

642

请解释循环的条件部分,即:i=j以及循环如何执行!

2 个答案:

答案 0 :(得分:0)

  

在C ++或C中,几乎可以将任何表达式作为条件:任何东西   评估为零意味着错误;非零意味着真实。

以下是SourceSample code,供您查看C / C ++中的条件。

如果j-=2令您感到困惑,那么它就是j=j-2的简写。您可以查看此link以获取有关短缺的更多信息。

以下是分解说明:

void main()
{
// i is undefined and j is 6
  int i,j=6;
  for(; i=j; j-=2)
// i starts from 6, getting the value of j in each condition checking. 
// on every comparison, the value of j is assigned to i
// loop goes on till i=j ie: i=j=0 in this case
// in every iteration j is decremented by 2 ie: j=j-2

 // print the value in j
  printf("%d", j);
}

读取for for hereMSDN

编辑:最初我错过了i=j部分。我认为它是i==j

所以解释,在这种情况下,循环没有初始化器。但是,循环条件而不是逻辑条件是初始化语句。因此i在第一次检查循环条件时从6获取j的值,而不是从i的声明中获取i的值。在所有后续检查中,即在每次循环迭代之后,j将被赋予i=j的值,并且条件0对于所有期望值j都将为真。因此当0i时,循环退出,然后0i=j,然后0也为Persons.OrderBy(p => p.CreatedDate);

答案 1 :(得分:0)

迭代3次。第一个输出是6,第二个输出是4,最后一个输出是2。 你可以改变你的代码,而且很清楚。

int i, j = 6;
for (; i = j; j -= 2){
    printf("j=%d", j);
    printf("i=%d", i);
}