鱼C论坛

 找回密码
 立即注册
查看: 3416|回复: 7

C语言 例题3.19 求助

[复制链接]
发表于 2012-3-11 18:16:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include<stdio.h>
  2. void main()
  3. {
  4. int a=2,b=4,c=6,x,y;
  5. y=(x=a+b),(b+c);
  6. printf("y=%d,x=%d",y,x);
  7. }
复制代码
C_005.GIF

对于表达式y=(x=a+b),(b+c)的运算过程不应该是如下这样的吗?
y=(x=a+b),(b+c)
  =(x=2+4),(4+6)
  =(x=6),(10)
  =x,10
  =10

为什么最后运行程序的结果却是y=6,x=6 呢??



                               
登录/注册后可看大图
该贴已经同步到 风剑河的微博
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-3-11 21:48:44 | 显示全部楼层
y=((x=a+b),(b+c) )
试试
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-3-11 23:22:30 | 显示全部楼层
我ollydbg反汇编了一下,好像并没有执行b+c。。而ls加了括号执行是可以的。。是不是优先性问题。。。我去百度,结果看了一个和你程序一样,但却想当然地认为是y为10。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-3-12 12:05:33 | 显示全部楼层
本帖最后由 仰望天上的光 于 2012-3-12 12:06 编辑

对于表达式y=(x=a+b),(b+c)的运算过程是这样的:
y=(x=a+b),(b+c)
(y=(x=2+4)),(b+c)
(y=(x=6)),(b+c)
(y=6),(b+c)
6,(b+c)
(b+c)
(4+6)
10

最后把这个10抛弃掉
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-3-12 13:39:29 | 显示全部楼层
楼主去看下 逗号运算符 就明白了,这点内容在 逗号运算符 里面那有!
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-3-12 21:08:03 | 显示全部楼层
不明白,还是不明白,此程序甲鱼大大在视频里都说了“肯定是将后面的(b+c)赋值给y”,但实际上我的运算结果却与甲鱼大大说的不一样。是编译器的问题吗?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-3-12 22:48:30 | 显示全部楼层
y=(x=a+b),(b+c);

b+c编译器根本就不生成代码的
b+c结果并没有任何作用
没有被引用 编译器作者又不是二货 vc想想吧 微软的 程序员杠杠的
y=(x=a+b),(b+c)
,分隔了两个表达式 就做了表达式1 表达式2b+c无任何作用 干嘛生成代码
但是中间加个括号
y=((x=a+b),(b+c))
=号分隔了两个表达式
y和x=a+b),(b+c))
y=表达式的值
有,表达式值为b+c得到结果赋给y
这种b+c有意义才会有生成代码的
作者怎么写编译器 肯定有读一个表达式的结果是否被引用
关于优化有很多的 什么a的构造当b的参数 基本上a就不会被构造了

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-3-16 15:48:53 From FishC Mobile | 显示全部楼层
括号高于赋值,赋值高于逗号!
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-12 00:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表