鱼C论坛

 找回密码
 立即注册
查看: 3711|回复: 11

a++和++a问题

[复制链接]
发表于 2013-6-27 10:14:40 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 babytsstar 于 2013-6-27 10:18 编辑

int a=2
“printf("%d,%d\n",a,++a);”为什么是3,3而不是2,3呢
“printf("%d,%d\n",++a,a);”为什么是3,2而不是3,3呢
“printf("%d,%d\n",a,a++);”为什么是2,2,而不是2,3
“printf("%d,%d\n",a++,a);”为社么是2,2,而不是3,3
每一个printf都是独立而不是在同一个程序的






想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-27 13:11:23 | 显示全部楼层
[img=157,109]C:\Documents and Settings\Administrator\桌面\5MSN$CR`[B5OM%OO)QZX32J.jpg[/img]1,++a,是先++后取值,而a++是先取值后++;
2.运算的结合性是从左往右进行运行的。
我的编译器运行结果是:
还有,我不小心点了反对,对不起哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-27 13:13:45 | 显示全部楼层
++i 和 i++的区别就是

++i 是先完成加法后,将值赋给 i
i++ 是先把值赋给 i ,然后再做加法,
第一个很好理解,关键是第二个,
对于第一个  , printf 执行的时候肯定就先完成++i 后,得到了 i 现在的值
而第二个,执行printf 时,只是将 i +1,然后输出,输出完成后,这是才把 i++最后结果给i
你不信的话,可以在每行语句下面再次输出一下a的值

第一行不对吧!本来就应该是2 ,3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-27 13:14:07 | 显示全部楼层
刚刚照片没贴上!
5MSN$CR`[B5OM%OO)QZX32J.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-27 13:48:22 | 显示全部楼层
我认为可以这么去理解,全部符合情况: QQ截图20130627134042.gif

输出跟运算是分两步进行的。

首先进行的是运输,
第一行这么来理解:编译系统检测到有自加运输进行,首先将a自加,然后编译系统检测到还有printf打印,于是打印输出就出现了3,3

第二行:同理检测到有运算,先运算再打印输出 4,4

第三行:同理先检查到有运输,a++, a第一次输出就是4了,第二次就是5了。可能由于进行运算的是a++,所以在输出顺序他为先, 所以为5,6

第三行:同理

不知道这样来理解对不对?   或者请大牛解释内存当中究竟是怎么运算的。。。


对于lz的备注,跟我的输出结果不同,我不知道是什么原因我用的是VS2012,可能lz的编译器有问题吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-27 13:56:36 | 显示全部楼层
lz用什么编译器?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-27 14:08:14 | 显示全部楼层
学习 了!!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-27 14:10:25 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-27 14:14:53 | 显示全部楼层
未定义行为 结果不可靠 编译器不一样 结果可以不一样
甚至 编译器一样只是编译参数不同 结果也会不同

C规定 函数参数的求值顺序是不明确的
所以 这里 a 和 a++是哪一个表达式先求值无法确定
而你的结果 依赖求值顺序 那么结果也是无法确定的

你的做法 和 i=i++ 一样 属于错误的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-27 14:23:37 | 显示全部楼层
我是师兄 发表于 2013-6-27 14:14
未定义行为 结果不可靠 编译器不一样 结果可以不一样
甚至 编译器一样只是编译参数不同 结果也会不同

那么这个printf不就是没意义?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-27 14:43:11 | 显示全部楼层
茫茫搞不懂为什么第一个会是 3,3~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-27 14:56:35 | 显示全部楼层
babytsstar 发表于 2013-6-27 14:23
那么这个printf不就是没意义?

嗯 这个写法是错的 输出结果是没有意义的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-29 01:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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