如何为以下代码中的if条件分配赋值

时间:2013-10-13 16:43:31

标签: c if-statement

此代码的工作原理。这里i变量获得了55值的分配。但是if语句因为55而不是0而失败的原因,这里其他声明已经执行。这种解释如何发生。 正如我预期的那样outputTest Skills 55但不是。{/ p>

#include<stdio.h>
void main()
{
  int i;
  i=0;
  if(i=55,0,10,0)
  printf("Test Skills %d",i);
  else
  printf("C Programing %d",i);

 }

任何人都可以在上面的代码中解释它的行为吗?

3 个答案:

答案 0 :(得分:3)

逗号表达式

exp1, exp2

其中exp1exp2是任意两个表达式。这将分两步评估:

    评估
  1. exp1并丢弃其值。
  2. 评估
  3. exp2,其值是整个表达式的值。
  4. 注意: 评估exp1应始终产生副作用;如果没有,则exp1没有任何用途

    在你的情况下

    if(i=55,0,10,0)
    
    首先评估

    i=55并丢弃其值(但已对i产生副作用,即55已分配给i)。 0然后评估并丢弃。 10然后评估并丢弃。在此之后,评估大多数0,它将是{em>整个表达式的值(但不是子表达式的值))if条件下的条件的即可。
    但是i的副作用已经完成,这就是为什么输出为55的原因。

答案 1 :(得分:0)

,运算符从左到右执行。因此,最后一个值为0,使if为false。

if(i=55,0,10,0) => if(i,0,10,0) => if(55,0,10,0) => if(0) => which returns false
                                     ^^^^-> Value of i

i仍为55,因为,的优先级最低。

,运算符执行它的左表达式并返回右表达式的结果作为,运算符的结果。

此处需要注意的是赋值运算符的优先级高于,。这就是i获得值55的原因。

答案 2 :(得分:0)

逗号运算符从左到右。

您的值为55,0,10,0,最右边的值为0,表示false

此外,赋值运算符的优先级高于逗号,因此i设置为55