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


在以下代码中:

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

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


3459
2018-05-15 14:21


起源



答案:


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


10
2018-05-15 14:23



如果它给10分配10,但c = 10应该返回1? - user2131316
这不太好,想想声明a = c = 10;难道你不想要10而不是1吗? - Bathsheba
@ user2131316: 表达  c = 10 有价值的 c 转让后(N1570,6.5.15 / 3)。赋值表达式不是布尔表达式。 - John Bode


答案:


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


10
2018-05-15 14:23



如果它给10分配10,但c = 10应该返回1? - user2131316
这不太好,想想声明a = c = 10;难道你不想要10而不是1吗? - Bathsheba
@ user2131316: 表达  c = 10 有价值的 c 转让后(N1570,6.5.15 / 3)。赋值表达式不是布尔表达式。 - John Bode


while((c=10)>0)

c = 10  应该 返回 10

现在,为 while(10>0)  10>0> 操作员返回 1 (非零值)。


1
2018-05-15 14:33





赋值返回指定的值。以防万一 c=10 因为10!= 0,所以在c中它也意味着是,所以这是一个无限循环。

就像你会写的那样

while(10)

加上你完成了作业。

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

while(c=0)

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


1
2018-05-15 14:22





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


1
2018-05-15 14:25



为什么要为c分配垃圾值? - Suvarna Pattayil
因为它尚未初始化,编译器会自动为此分配一些值。因为内存中的所有地址在初始化之前都有一些值 - Ashish Rawat
c = 10 它不会赋值 10 至 c? - Suvarna Pattayil
它在第一个语句中为c分配10而不是在第二个语句中 - Ashish Rawat
哦,我认为它只有一个块 - Suvarna Pattayil


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

0
2017-08-30 03:08