| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 587 人关注过本帖
标题:搞了我头都晕的 关于 逗号 运算符 的一个 问题?
只看楼主 加入收藏
chihuyu
Rank: 2
等 级:论坛游民
帖 子:70
专家分:13
注 册:2011-12-26
结帖率:100%
收藏
已结贴  问题点数:1 回复次数:9 
搞了我头都晕的 关于 逗号 运算符 的一个 问题?
#include"stdio.h"
void main()
{
    int a=90,b,c;
    b=(a=12,(a*4,c=a=a+5));
    printf("a=%d,b=%d,c=%d\n",a,b,c);
}
答案的输出a=17,b=17,c=17;以上的程序等价于红色括号没有。
而我觉得答案应该是a=12,b=95,c=95; 理由: 运算符号当中()拥有最高的权限。
望高手解答。谢谢!
搜索更多相关主题的帖子: void include 
2012-01-25 23:17
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:1 
回答我三个问题
1.逗号运算符的优先级有多高?
2.逗号运算符的运算方向是从哪到哪的?有些书上也叫结合性。
3.逗号运算符的返回值是什么?


[ 本帖最后由 beyondyf 于 2012-1-25 23:35 编辑 ]

重剑无锋,大巧不工
2012-01-25 23:34
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
收藏
得分:0 
详细给你解释吧,(,,,,,,)假设有n个逗号,哪一共有n+1个表达式。如(a=2,b=2),有一个逗号,两个表达式。取值决定于最右边的表达式。
但是左边的那些表达式也要先计算。
所以 b=(a=12,(a*4,c=a=a+5));别急,一层层脱,first,我们知道(a=12,(a*4,c=a=a+5));的值取决(a*4,c=a=a+5),而这个取决于c=a=a+5,所以整个表达式取决于c=a=a+5,即b取决于它;再来,首先计算a=12,所以a*4=48,这个表达式对a无影响,继续c=a=a+5,所以a=17,c=17,这样b=17;

再提一点,去找些逗号运算符的题练练。

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2012-01-26 00:30
lingji521
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-1-26
收藏
得分:0 
路过
2012-01-26 00:56
回首依依
Rank: 7Rank: 7Rank: 7
来 自:苏州
等 级:黑侠
威 望:1
帖 子:193
专家分:524
注 册:2011-12-3
收藏
得分:0 
b=(a=12,(a*4,c=a=a+5));
逗号运算表达式自左向右运算,首先a=12;其次,算(a*4,c=a=a+5),这又是个逗号运算表达式,先算a*4,其次算c=a=a+5,a中存储值改为17,c亦是;最后算整个表达式,(a=12,(a*4,c=a=a+5))以最后式子值作为整个表达式的值,所以b=17.所以a=b=c=17.
2012-01-26 10:18
C博士家园
Rank: 1
等 级:新手上路
帖 子:6
专家分:2
注 册:2012-1-13
收藏
得分:0 
很高兴为您解答  针对您的问题 我进行回答
1.逗号是所有运算符中最低的  我将所有运算符的优先级结合性进行排列     
  数组下标和指针>算术运算符>位移>关系运算符(逻辑比较)>位运算>逻辑(与或)>问号>赋值>逗号
2.结合性是从左向右  因为逗号结合性最低  所以逗号俩边的都单独进行运算  整体式子从左至右
3.逗号表达式的返回值是逗号表达式最后式子的结果
2012-01-26 14:28
chihuyu
Rank: 2
等 级:论坛游民
帖 子:70
专家分:13
注 册:2011-12-26
收藏
得分:0 
谢谢大家的回复!
是否可以理解为:逗号表达式不论有多少个,都是从左算到右,不论当中是否加不加括号?
2012-01-27 09:33
yxiangyxiang
Rank: 3Rank: 3
来 自:/\/\/\/\/
等 级:论坛游侠
帖 子:130
专家分:186
注 册:2012-1-29
收藏
得分:0 
原来如此我现在也知道逗号怎么用了  谢谢3楼
2012-02-02 12:50
C_596322153
Rank: 6Rank: 6
来 自:徽州
等 级:侠之大者
帖 子:182
专家分:466
注 册:2012-1-10
收藏
得分:0 
以下是引用fourleaves在2012-1-26 00:30:09的发言:

详细给你解释吧,(,,,,,,)假设有n个逗号,哪一共有n+1个表达式。如(a=2,b=2),有一个逗号,两个表达式。取值决定于最右边的表达式。
但是左边的那些表达式也要先计算。
所以 b=(a=12,(a*4,c=a=a+5));别急,一层层脱,first,我们知道(a=12,(a*4,c=a=a+5));的值取决(a*4,c=a=a+5),而这个取决于c=a=a+5,所以整个表达式取决于c=a=a+5,即b取决于它;再来,首先计算a=12,所以a*4=48,这个表达式对a无影响,继续c=a=a+5,所以a=17,c=17,这样b=17;
 
再提一点,去找些逗号运算符的题练练。
同意  推荐C/C++程序设计学习与实验系统 软件  适合初学者
2012-02-02 16:00
lr982330245
Rank: 2
等 级:论坛游民
帖 子:12
专家分:16
注 册:2012-1-29
收藏
得分:0 
一层层脱的问题;
(a=12,(a*4,c=a=a+5));----------------------------- 脱去a=12,   只剩下 (a*4,c=a=a+5);    a由95变成了 12(因为执行a=12)
     (a*4,c=a=a+5);      ----------------------------- 脱去 a*4,   只剩下(c=a=a+5);         a=17了,c也等于17(因为执行c=a=a+2)

所以b 的值就是 表达式 c=a=a+5的值呗

c=a=a+5的运算按照从右往左,"="是赋值运算,赋值运算的顺序是从右到左地。
所以b=17
所以 a=17,b=17,c=17.


[ 本帖最后由 lr982330245 于 2012-2-2 17:17 编辑 ]
2012-02-02 17:15
快速回复:搞了我头都晕的 关于 逗号 运算符 的一个 问题?
数据加载中...
 
   



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

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