逗号运算器符,该如何处理
逗号运算器符
本人对逗号运算符不太明白,希望大虾们帮帮忙!
1.int x=3,5;最后为什麽实际x=5, .3没起作用吗?
2.for(i=0;i < 9;i++,i--)
是死循环对吗?解释一下!
for(i=1,j=1;i<10,j<10;i++,j++)是什么意思?
3.int a=0,b=0,c=0;
c=(a-=a-5),(a=b,b=3);
最后a=0;b=0;c=5说说为什么?
------解决方案--------------------
我用VC++2010的结果如下:
本人对逗号运算符不太明白,希望大虾们帮帮忙!
1.int x=3,5;最后为什麽实际x=5, .3没起作用吗?
2.for(i=0;i < 9;i++,i--)
是死循环对吗?解释一下!
for(i=1,j=1;i<10,j<10;i++,j++)是什么意思?
3.int a=0,b=0,c=0;
c=(a-=a-5),(a=b,b=3);
最后a=0;b=0;c=5说说为什么?
------解决方案--------------------
我用VC++2010的结果如下:
- C/C++ code
int a = 0, b = 0, c = 0, d = 0; int e = 0; c = (a -= a-5), (a = b, b = 3); d = (a = b, b = 4), 6; e = 7, 9; printf("a=%i\tb=%i\tc=%i\td=%i\te=%i\n", a, b, c, d, e);
------解决方案--------------------
第三个,vs2008,结果a=0,b=3,c=5。看汇编得出运算顺序为:
1、先算逗号前面的式子c=(a-=a-5),先算括号里边的a-=a-5,得5赋值给c=5;
2、再算逗号后边的(a=b,b=3),这个括号里边又有一个逗号运算符,照上,先算a=b,即把b=0赋值给a=0,再算b=3,
则最后a=0,b=3,c=5;
不同编译器运算顺序不一样吧,
------解决方案--------------------
逗号表达式 取最右边的值
但要注意 赋值运算符比逗号优先
------解决方案--------------------
1.int x=3,5;最后为什麽实际x=5, .3没起作用吗?
我想说的是,上面这条语句是非法的,编译甚至会出现错误
int x=(3,5);//合法,圆括号中的逗号表达式,取最后一个表达式的值,所以x的值是5
2.for(i=0;i < 9;i++,i--)
是死循环对吗?解释一下!
由于每当执行一次循环之后,i都++,--,则效果是i的值始终是0,所以会出现死循环
for(i=1,j=1;i<10,j<10;i++,j++)是什么意思?
只是 中间判断表达式(i<10,j<10)的值为 j<10该表达式的值
3.int a=0,b=0,c=0;
c=(a-=a-5),(a=b,b=3);
最后a=0;b=0;c=5说说为什么?
最后 a=0,b=3,c=5;