鱼C论坛

 找回密码
 立即注册
查看: 2460|回复: 2

逗号运算符

[复制链接]
发表于 2012-3-28 20:46:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 xu1012 于 2012-3-29 14:07 编辑

#include "stdio.h"
void main()
{
int a = 2,b = 4,c = 6,x,y;
y = (x=a+b),(b+c);
printf("y=%d,x=%d",x,y);
getchar();
}


y为什么答案是6啊?求解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-28 22:48:35 | 显示全部楼层
这是一个重复贴子?..我在你的另一个帖子里面回复了..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-3-28 23:50:54 | 显示全部楼层
在网上看到的资料
蛮不错的
  在C语言中,多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。

  假设b=2,c=7,d=5,

  a1=(++b,c--,d+3);

  a2=++b,c--,d+3;

  对于第一行代码,有三个表达式,用逗号分开,所以最终的值应该是最后一个表达式的值,也就是d+3,为8,所以a1=8。

  对于第二行代码,那么也是有三个表达式,这时的三个表达式为a2=++b、c--、d+3,(这是因为赋值运算符比逗号运算符优先级高)所以最终表达式的值虽然也为8,但a2=3。

  注意:逗号运算的结合性是从左至右,完毕之后整个表达式的值是最后一个表达式的值。

  例子:int a[2],x=2,y=5;

  a[0]=(x+3,y++,x++);那么最终结果是:a[0]=2 x=3 y=6;

  为何a[0]=2:因为(x++)是运算之后再自加

  a[1]=(x++,x+3,x+7);那么最终结果是:a[1]=11 ,x=4

  第一反应,我以为a[1]=10,就是3+7;其实是错的,逗号运算是从左至右,所以先算

  x++,x从而变成4了,然后a[1]=4+7=11;

  不信你改成a[1]=(x++,x+3);调试一下,结果是7,就是4+3,说明经过一个逗号,x已经自加变成4了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 16:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表