此代码的工作原理。这里i
变量获得了55
值的分配。但是if
语句因为55
而不是0
而失败的原因,这里其他声明已经执行。这种解释如何发生。
正如我预期的那样output
是Test 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);
}
任何人都可以在上面的代码中解释它的行为吗?
答案 0 :(得分:3)
逗号表达式
exp1, exp2
其中exp1
和exp2
是任意两个表达式。这将分两步评估:
exp1
并丢弃其值。 exp2
,其值是整个表达式的值。 注意: 评估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
。