在以下代码中:
int c;
while((c=10)>0)
c = 10
评估什么?是 1 表示将值 10 赋值给变量 c 成功,还是 10?为什么?
在以下代码中:
int c;
while((c=10)>0)
c = 10
评估什么?是 1 表示将值 10 赋值给变量 c 成功,还是 10?为什么?
c = 10 是一个返回 10 的表达式,它也将 10 分配给 c。
据说在 C99 6.5.16
An assignment operator stores a value in the object designated by the left operand. An
assignment expression has the value of the left operand after the assignment, but is not an
lvalue.
赋值返回指定的值。如果c=10
是 10。由于 10!=0,在 c 中它也意味着 true,所以这是一个无限循环。
就像你会写
while(10)
另外,您已经完成了任务。
如果你遵循这个逻辑,你可以看到,
while(c=0)
将是一个永远不会执行其语句或块的循环。
这是一个无限循环。它首先将 10 分配给 c,然后将其与 c > 0 进行比较,然后再次开始循环,将 10 分配给 c,将其与 c>0 进行比较,依此类推。循环永远不会结束。这等效于以下内容:
while(c=10);
/* Because c assign a garbage value, but not true for all cases maybe it assign 0 */
while(c);
编辑:它不会返回 10,因为编译器只返回 true 或 false 值,所以它返回 true 或 1 而不是 10。