1

这段代码是如何工作的。这里i变量得到赋值。55但是为什么if语句失败,因为我55没有0,这里执行 else 语句。这种解释是如何发生的。正如我所料outputTest Skills 55但事实并非如此。

#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);

 }

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

4

3 回答 3

3

逗号表达式

exp1, exp2

whereexp1exp2是任意两个表达式。这将分两个步骤进行评估:

  1. exp1被评估并丢弃它的值。
  2. exp2被评估并且它的值是整个表达式的值。

注意: 评估exp1应该总是有副作用;如果没有,那就exp1没有用了。

在你的情况下

if(i=55,0,10,0)

i=55i首先评估并丢弃其值(但已完成副作用,即55分配给i)。0然后评估并丢弃。10然后评估并丢弃。然后最右边0被评估,它将是条件中整个表达式的值((但不是子表达式的值))if并使条件为false
但是副作用i已经完成,这就是为什么你得到输出为55.

于 2013-10-13T16:45:11.180 回答
0

逗号运算符从左到右。

你有价值观:55,0,10,0最右边的价值观0就是false.

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

于 2013-10-13T17:11:11.670 回答
0

,运算符从左到右执行。所以最后一个值是0错误的if

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 因为, 具有最低的优先级。

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

这里要注意的另一件事是赋值运算符具有更高的优先级 then ,。这就是为什么i得到价值55

于 2013-10-13T16:46:13.143 回答