C中赋值表达式的结果是什么?

在以下代码中:

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

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

c = 10是表达式返回10,其也将10分配给c。

 while((c=10)>0) 

c = 10 应该返回10

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

赋值返回指定的值。 在c=10情况下是10.由于10!= 0,在c中它也意味着是,因此这是无限循环。

就像你会写的那样

 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。

在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.