C中赋值表达式的结果是啥? [复制]

Posted

技术标签:

【中文标题】C中赋值表达式的结果是啥? [复制]【英文标题】:What is the result of an assignment expression in C? [duplicate]C中赋值表达式的结果是什么? [复制] 【发布时间】:2013-05-10 04:14:40 【问题描述】:

在以下代码中:

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

如果将 10 分配给 c,但 c = 10 是否应该返回 1? 这样不好,想想 a = c = 10;你不希望 a 是 10,而不是 1? @user2131316: 表达式 c = 10 在赋值后具有c 的值(N1570, 6.5.15/3)。赋值表达式不是布尔表达式。 它不返回 10,它返回 c,第一次调用时为 10。不同之处在于c 的值很可能会在while 块中发生变化。【参考方案2】:

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

【讨论】:

最佳答案 - 清晰、准确、简短 跟进@martinkunev的回答:这个回答也更好,因为它直接引用了标准,更直接地谈到了表达式值的类型的问题,它与左边的类型匹配-手操作数。 (考虑 a=b=c 其中 acunsigned intb无符号短。) 这也意味着int x = 10; int y = (x += 1); 的结果是x = 11, y = 11不是 x = 11, y = 1【参考方案3】:

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

这就像你会写

while(10)

另外你已经完成了任务。

如果你按照这个逻辑,你可以看到,那

while(c=0)

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

【讨论】:

【参考方案4】:
while((c=10)>0)

c = 10should 返回10

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

【讨论】:

【参考方案5】:

这是一个无限循环。它首先将 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会被赋值为垃圾值? 因为它还没有初始化,编译器会自动为其分配一些值。因为内存中的所有地址在初始化之前都有一些值 c = 10 会不会将值10 分配给c 它在第一个语句而不是第二个语句中将 10 分配给 c 哦,我以为是一个块

以上是关于C中赋值表达式的结果是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C语言中num/=10是啥意思

C语言问题 赋值表达式返回值是啥?比如j=0这个表达式的返回值是啥?

Java 中赋值表达式的计算结果是啥?

C语言中表达式的返回值是啥,返回到哪里?跟return有关?

c语言中规定 赋值运算符的左边必须是啥?

c语言中赋值表达式的值是啥,就比如关系表达式的值是一个逻辑值