这段代码如何工作?

时间:2011-12-11 16:12:45

标签: c++ c

1)

int i;

for(i=1;i<5,i<8;i++){

}
printf("%d",i);

2)。

int i;

for(i=1;i<18,i<6;i++){

}
printf("%d",i);

输出为1.)为8而对于2.)为6

我没有了解代码的工作原理,我们将非常感谢帮助。

2 个答案:

答案 0 :(得分:5)

,运算符求值为其最后一个操作数。

i < 18, i < 6i

6变为虚假。

答案 1 :(得分:5)

逗号运算符(,)

  

逗号运算符(,)用于分隔两个或多个表达式,这些表达式只包含一个表达式。 当必须为某个值计算表达式集时,只考虑最右边的表达式

因此:

for(i=1;i<5,i<8;i++)

相当于:

for(i=1;i<8;i++)

评估i8

的值

for(i=1;i<18,i<6;i++)

相当于:

for(i=1;i<6;i++)

评估i6

的值

Standerdese参考:

C ++ 11标准§5.18:

  

逗号运算符从左到右分组。

     

表达式:
  赋值表达式
  表达式,赋值表达式

     

用逗号分隔的一对表达式从左到右进行评估;左表达式是丢弃值表达式(第5条)83 。在与右表达式相关联的每个值计算和副作用之前,对与左表达式相关联的每个值计算和副作用进行排序。 结果的类型和值是右操作数的类型和值;结果与右操作数具有相同的值类别,如果右操作数是glvalue和位域,则为位字段。