| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3056 人关注过本帖
标题:求教逗号运算问题
只看楼主 加入收藏
夜风缘
Rank: 2
等 级:论坛游民
帖 子:18
专家分:15
注 册:2017-2-16
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:22 
求教逗号运算问题
#include<stdio.h>
main()
{
   int x,y,z;
   x=y=1;
   z=x++,y++,++y;
   printf("%d,%d,%d\n",x,y,z);
}
程序运行是2 3 1,虽然说赋值运算符优先级在逗号运算符上,但是举个例子:a=3*5,a*4,a+5;结果从左到右:a=15,a*4a值不变,a+5=20,最后取最后一个表达式的值,20。
按以上流程,应该是2 3 3,不解,求解答,谢谢。
搜索更多相关主题的帖子: 表达式 优先级 
2017-02-19 22:23
kin3z
Rank: 5Rank: 5
等 级:职业侠客
威 望:4
帖 子:157
专家分:390
注 册:2011-4-24
收藏
得分:2 
z=x++,y++,++y;
z = x++ ; 也就是x的1给了z,然后x自增到2。
y++,++y; 把y的1自增到3。
因此 z = 1 , y = 3 , x = 2 .
2017-02-19 23:00
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:2 
这样的y++,和++y写在一行是属于未定义行为~应该要避免~会可能因为编译器行为不同而会有不同的结果~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-19 23:26
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 3楼 九转星河

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-19 23:26
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:2 
一点儿问题都没有

z=x++,y++,++y;
是 (z=x++),y++,++y; 而非 z=(x++,y++,++y);

a=3*5,a*4,a+5 这个表达式的值是20,而非a的值是20
2017-02-20 08:28
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 5楼 rjsp
看来我的基础还不是太好~学习了~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-20 10:36
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:2 
我也没弄明白 c设计者弄这个逗号运算符 有神马用

DO IT YOURSELF !
2017-02-20 10:37
yuantkong
Rank: 2
等 级:论坛游民
威 望:3
帖 子:82
专家分:86
注 册:2016-5-17
收藏
得分:2 

a=3*5,a*4,a+5

a的值应该是15, 因为后面的运算都没有把值赋给 a


2017-02-20 12:03
夜风缘
Rank: 2
等 级:论坛游民
帖 子:18
专家分:15
注 册:2017-2-16
收藏
得分:0 
回复 5楼 rjsp
的确是这样,但是a=3*5,a*4,a+5难道不能写成(a=3*5),a*4,a+5;按这么说,这个表达式值就是15。我不明白的是这个表达式应该取的是最后一个式子的值,加了括号,不也还是逗号运算符么。不管前面怎么运算,不都应该取最后一个表达式的值,难道是因为变量的原因?z=x++,y++,++y;因为前后变量不同,所以不能一概而论,如果改成z=x++,y++,x+1;的话,就应该是z=2了吧。这样想对吗?
2017-02-20 13:10
夜风缘
Rank: 2
等 级:论坛游民
帖 子:18
专家分:15
注 册:2017-2-16
收藏
得分:0 
回复 8楼 yuantkong
很遗憾告诉你,a=20,这个我很确定,我只是举个例子说明,对这个结果并不怀疑。
2017-02-20 13:12
快速回复:求教逗号运算问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024889 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved