16

在以下代码中:

int c;
while((c=10)>0)

c = 10评估什么?是 1 表示将值 10 赋值给变量 c 成功,还是 10?为什么?

4

5 回答 5

16

c = 10 是一个返回 10 的表达式,它也将 10 分配给 c。

于 2013-05-15T14:23:12.543 回答
10

据说在 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.
于 2014-08-30T03:08:17.680 回答
2

赋值返回指定的值。如果c=10是 10。由于 10!=0,在 c 中它也意味着 true,所以这是一个无限循环。

就像你会写

while(10)

另外,您已经完成了任务。

如果你遵循这个逻辑,你可以看到,

while(c=0)

将是一个永远不会执行其语句或块的循环。

于 2013-05-15T14:22:30.033 回答
1

这是一个无限循环。它首先将 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。

于 2013-05-15T14:25:41.237 回答
1
while((c=10)>0)

c = 10 应该返回10

现在,对于while(10>0) 10>0>运算符返回1(非零值)。

于 2013-05-15T14:33:44.580 回答