| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 667 人关注过本帖
标题:3.10逗号运算符的一个问题
只看楼主 加入收藏
wxz11191975
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2011-6-20
结帖率:85.29%
收藏
已结贴  问题点数:5 回复次数:8 
3.10逗号运算符的一个问题
以下程序段:
int a=0,b=0,c=0;
c=(a-=a-5),(a=b,b+3);
printf("%d,%d,%d\n",a,b,c);

答案是:执行输出后的结果是0,0,5

谁可以帮我具体讲一下逗号表达式的值与其中变量如a,c的值?谢谢。
搜索更多相关主题的帖子: 问题 表达式 
2011-08-23 20:49
编程达人
Rank: 2
等 级:论坛游民
帖 子:62
专家分:66
注 册:2011-8-11
收藏
得分:1 
逗号表达式取最后一个表达式的值,如:表达式1,表达式2  则逗号表达式的值就是表达式2的值。上面第一个逗号表达式就是把5赋给c,第二个逗号表达式又是由两个表达式构成的逗号表达式,把b的值赋给a,所以a还是0
2011-08-23 21:05
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:1 
',' 对执行顺序没有任何影响,只是用于分隔两个表达式。
用 ',' 分隔的表达式按照他们出现的顺序执行。
变量定义、函数参数定义和参数传递的时候遇到的 ',' 是另一种语义。

c=(a-=a-5),(a=b,b+3); 与下面的代码相同:
a -= a - 5;
c = a;
a = b;
b + 3;

[ 本帖最后由 voidx 于 2011-8-24 01:17 编辑 ]
2011-08-23 21:07
ai8343512
Rank: 2
等 级:论坛游民
帖 子:75
专家分:94
注 册:2011-8-7
收藏
得分:1 
我对c = 5表示很不解……
从整体上看,逗号表达式并没有改变b的值,b + 3就应该等于3啊,可为什么等于5???不解,真不解……

思考不应该由他人来指导,会思考的人不需要你来提醒他去思考一个简单的问题。
2011-08-23 21:15
slhlili
Rank: 1
等 级:新手上路
帖 子:1
专家分:1
注 册:2011-4-18
收藏
得分:1 
c=(a-=a-5) 等价int d ;
d = a - 5 ;          // a = 0 , 所以d = -5
a -= d ;             // a = a -d , 所以 a-d = 5 , 则a = 5;
c = a ;            // c = 5
楼上的这下知道c为什么是5了
2011-08-23 21:29
king_kong
Rank: 2
来 自:山东
等 级:论坛游民
帖 子:71
专家分:55
注 册:2010-9-9
收藏
得分:1 
首先,c=(a-=a-5)  等同于c=(a=(a-a+5)),这样,a的值为5,然后赋值给c  即c=5,此时a也等于5;   
然后,(a=b,b+3);   这个好理解 , 第一步是  a=b,  这样a=b=0;第二步 ,b+3,但是没赋值  所以还是0
2011-08-23 21:29
QQ346957135
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:148
专家分:658
注 册:2011-8-9
收藏
得分:1 
括号的优先级最高,先第一个括号:先计算a-=a-5,a初值为0,a-5等于-5,又a-=-5,得a为5.然后就是逗号表达式了,形式为:c=5,(a=b,b+3);括号优先级最高,括号内又是一个逗号表达式,结果为a=0,c=5,b=0(b值不变)。仔细看书吧,书上有

A real warrior never quits.
2011-08-23 21:56
Hujc71
Rank: 2
等 级:论坛游民
帖 子:49
专家分:65
注 册:2010-3-31
收藏
得分:1 
貌似楼主把c=(a-=a-5),(a=b,b+3);与c=((a-=a-5),a=b,b+3);混为一团了,后者与楼主想的思路一样,前者其实是分开的两个表达式,但(a=b,b+3)才是逗号表达式! 
2011-08-24 08:31
lin471306489
Rank: 4
等 级:业余侠客
帖 子:136
专家分:247
注 册:2011-8-16
收藏
得分:1 
好好看看书啦,逗号运算只要细心点去分析就能做。
要自己做才能有进步的
2011-08-24 10:26
快速回复:3.10逗号运算符的一个问题
数据加载中...
 
   



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

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