c语言常识问题

来源:百度知道 编辑:UC知道 时间:2024/06/06 10:58:18
z=x++,y++,x+y;与
z=(x++,y++,x+y);
最后得z的值为什么不一样

因为
z=x++,y++,x+y;//这个就是普通的赋值表达式
z=(x++,y++,x+y);//这个是用逗号表达式的值给z进行赋值

z=x++,y++,x+y;
上面这个其实包含3个处理:
z=x++;//z值等于x,x随后再++处理
y++;//y进行++处理
x+y;//这一句不会报错,但是没有任何意义,可以无视

z=(x++,y++,x+y);
这一句先计算逗号表达式,
逗号表达式的两个原则:
1.逗号表达式的值取最右值
2.逗号表达式的计算方向是从左向右的
所以,逗号表达式的计算步骤如下:
x++//x加一处理
y++//y加一处理
x+y//最后将x+y的值赋给z

应该是这种关系
1+2*3
(1+2)*3

第一行应该是x自加后赋值于z
第二行是赋值运算符后的式子运算完后再赋值于z

应该是这样的,我学这个太久了,现在也少用,还真说不准,要再求证一下,别误导了你。不过是优先级问题是肯定的。

因为逗号运算符低于等号,第一行,先算z=x++,z被赋值。后面再算y++,最后算x+y,都与z无关。
第二行,括号里从左都右计算,最后把x+y的结果赋给z

z=x++,y++,x+y;这里只有z=x++可以实现.就是先把X的值给z,然后X自加1.
z=(x++,y++,x+y);这里是要把一个逗号表达式的值赋给z,先计算X++,再计算Y++,最后计算X+Y,并且把最后一个表达式的值给z.就这样.朋友.

这样的 第一个语句被分为3个表达式
z=x++
y++
x+y

第2个语句被分为4个表达式
x++
y++
x+y
z=...

这应该是你要问的问题

z=x++;这个后面不用看,应该还是x的值吧
z=(x++,y++,x+y);这句都是把x,y各自加1,相加赋给z