|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 搞了我头都晕的 关于 逗号 运算符 的一个 问题?
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
587
人关注过本帖
标题:
搞了我头都晕的 关于 逗号 运算符 的一个 问题?
只看楼主
加入收藏
chihuyu
等 级:
论坛游民
帖 子: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
等 级:
贵宾
威 望:
103
帖 子:3282
专家分:12654
注 册:2008-1-21
第
2
楼
收藏
得分:1
回答我三个问题
1.逗号运算符的优先级有多高?
2.逗号运算符的运算方向是从哪到哪的?有些书上也叫结合性。
3.逗号运算符的返回值是什么?
[
本帖最后由 beyondyf 于 2012-1-25 23:35 编辑
]
重剑无锋,大巧不工
2012-01-25 23:34
举报帖子
使用道具
赠送鲜花
fourleaves
等 级:
论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
第
3
楼
收藏
得分: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
等 级:
新手上路
帖 子:9
专家分:0
注 册:2012-1-26
第
4
楼
收藏
得分:0
路过
2012-01-26 00:56
举报帖子
使用道具
赠送鲜花
回首依依
来 自:苏州
等 级:
黑侠
威 望:
1
帖 子:193
专家分:524
注 册:2011-12-3
第
5
楼
收藏
得分: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博士家园
等 级:
新手上路
帖 子:6
专家分:2
注 册:2012-1-13
第
6
楼
收藏
得分:0
很高兴为您解答
针对您的问题 我进行回答
1.逗号是所有运算符中最低的
我将所有运算符的优先级结合性进行排列
数组下标和指针>算术运算符>位移>关系运算符(逻辑比较)>位运算>逻辑(与或)>问号>赋值>逗号
2.结合性是从左向右
因为逗号结合性最低
所以逗号俩边的都单独进行运算
整体式子从左至右
3.逗号表达式的返回值是逗号表达式最后式子的结果
2012-01-26 14:28
举报帖子
使用道具
赠送鲜花
chihuyu
等 级:
论坛游民
帖 子:70
专家分:13
注 册:2011-12-26
第
7
楼
收藏
得分:0
谢谢大家的回复!
是否可以理解为:逗号表达式不论有多少个,都是从左算到右,不论当中是否加不加括号?
2012-01-27 09:33
举报帖子
使用道具
赠送鲜花
yxiangyxiang
来 自:/\/\/\/\/
等 级:
论坛游侠
帖 子:130
专家分:186
注 册:2012-1-29
第
8
楼
收藏
得分:0
原来如此我现在也知道逗号怎么用了
谢谢3楼
2012-02-02 12:50
举报帖子
使用道具
赠送鲜花
C_596322153
来 自:徽州
等 级:
侠之大者
帖 子:182
专家分:466
注 册:2012-1-10
第
9
楼
收藏
得分: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
等 级:
论坛游民
帖 子:12
专家分:16
注 册:2012-1-29
第
10
楼
收藏
得分: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
举报帖子
使用道具
赠送鲜花
10
1/1页
1
快速回复:
搞了我头都晕的 关于 逗号 运算符 的一个 问题?
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.027728 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved