我有一个代码:
while (i = j) {
/* not important */
}
这个while
循环有多长时间了?直到变量j的值等于零的那一刻?
答案 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
循环可行,直到condition
或expression
评估为 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;