鱼C论坛

 找回密码
 立即注册
查看: 3199|回复: 22

a++具体在什么时刻才执行+1这一步啊

[复制链接]
发表于 2014-12-14 19:31:01 | 显示全部楼层 |阅读模式

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

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

x
  1. <div class="blockcode"><blockquote><p>
  2. </p><p>#include<stdio.h>
  3. void main()
  4. {
  5. int a=0;
  6. printf("%d %d",a++,a);
  7. } // 0  0</p><p>
  8. </p><p>
  9. </p><p>#include<stdio.h>
  10. void main()
  11. {
  12.         int a=0;
  13.         printf("%d",(a++,a));
  14. } // 1</p><p>
  15. </p><p>//为什么第一个程序里的第二个a是0,而第二个程序里的第二个a是1呀</p>
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-12-14 19:40:38 | 显示全部楼层
之前看到过说是整个表达式求值之后再自加,那  int i=3;k=(i++)+(i++)+(i++);  k=9  i=6 这种可以理解,那按理说(a++,a),应该在逗号运算符执行完了a才+1,那逗号运算的结果不应该是0吗:cry
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-16 23:20:55 From FishC Mobile | 显示全部楼层
额,我后来理解为,+1运算优先顺序比赋值运算低但比逗号运算高,是这个意思吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-16 23:22:03 From FishC Mobile | 显示全部楼层
xjc_621105 发表于 2014-12-15 17:33
先求解a++,再求解a,逗号表达式求解是顺序执行完成之后,返回第二个表达式的值,所以是1

额,我后来理解为,+1运算优先顺序比赋值运算低但比逗号运算高,是这个意思吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-24 11:35:03 | 显示全部楼层
赵晓玉 发表于 2014-12-17 22:56
a++是先用后加  ++a是先加后用

想问的就是加和用的分界点在哪
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-24 11:36:05 | 显示全部楼层
只為不段前行 发表于 2014-12-17 12:28
其实 你可以这样理解的 a++ 分解成 先 a=a 然后a=a+1,这其中a=a+1 是执行下个语句要用的 而不是当前要用到 ...

执行逗号运算不算下一个语句吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-24 11:45:17 | 显示全部楼层
GRRRARD 发表于 2014-12-18 17:42
我记得《C++PRIME》里有关于这点的介绍,好像i++这种情况与编译器有关,而且关系到拷贝的问题,所以一般都 ...

额,自己找了个理解方式
一般情况(逗号不当运算符时)自加发生在下一个语句中即以分号做分界线,逗号作运算符时是个奇葩,出现这个就以逗号运算符做是否自加的分界线,vc中printf输出涉及自加时从右往左运算,貌似都能解释清楚了:lol:
d=8;
printf("%d %d %d %d %d\n",--d,++d,d++,-d++,-d--);  //8,9,8,-8,-8
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-24 11:46:47 | 显示全部楼层
ganlei00 发表于 2014-12-20 09:32
我知道你不知道我知道

你说你知道我就知道你知道了:titter:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-24 11:49:16 | 显示全部楼层
hapizz 发表于 2014-12-17 22:20
就看我这个

对比 参悟 然后懂了

恩,用我想的自加发生在逗号运算前其他所有运算后可以解释通,谢啦:lol:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-24 11:49:59 | 显示全部楼层
问题已解决啦
额,自己找了个理解方式
一般情况(逗号不当运算符时)自加发生在下一个语句中即以分号做分界线,逗号作运算符时是个奇葩,出现这个就以逗号运算符做是否自加的分界线,vc中printf输出涉及自加时从右往左运算,貌似都能解释清楚了
d=8;
printf("%d %d %d %d %d\n",--d,++d,d++,-d++,-d--);  //8,9,8,-8,-8
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-5 06:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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