【发布时间】:2013-05-10 04:14:40
【问题描述】:
在以下代码中:
int c;
while((c=10)>0)
c = 10 的评估结果是什么?是 1 表示将值 10 分配给变量 c 成功,还是 10?为什么?
【问题讨论】:
标签: c expression assignment-operator
在以下代码中:
int c;
while((c=10)>0)
c = 10 的评估结果是什么?是 1 表示将值 10 分配给变量 c 成功,还是 10?为什么?
【问题讨论】:
标签: c expression assignment-operator
c = 10 是一个返回 10 的表达式,它也将 10 分配给 c。
【讨论】:
c = 10 在赋值后具有c 的值(N1570, 6.5.15/3)。赋值表达式不是布尔表达式。
c,第一次调用时为 10。不同之处在于c 的值很可能会在while 块中发生变化。
据说在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.
【讨论】:
int x = 10; int y = (x += 1); 的结果是x = 11, y = 11,不是 x = 11, y = 1。
赋值返回赋值。如果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。
【讨论】:
c = 10 会不会将值10 分配给c?