鱼C论坛

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

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

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

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

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

x
<div class="blockcode"><blockquote><p>
</p><p>#include<stdio.h>
void main()
{
 int a=0;
 printf("%d %d",a++,a);
} // 0  0</p><p>
</p><p>
</p><p>#include<stdio.h>
void main()
{
        int a=0;
        printf("%d",(a++,a));
} // 1</p><p>
</p><p>//为什么第一个程序里的第二个a是0,而第二个程序里的第二个a是1呀</p>

想知道小甲鱼最近在做啥?请访问 -> 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-15 17:33:44 | 显示全部楼层
先求解a++,再求解a,逗号表达式求解是顺序执行完成之后,返回第二个表达式的值,所以是1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

额,我后来理解为,+1运算优先顺序比赋值运算低但比逗号运算高,是这个意思吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-17 12:28:40 | 显示全部楼层
其实 你可以这样理解的 a++ 分解成 先 a=a 然后a=a+1,这其中a=a+1 是执行下个语句要用的 而不是当前要用到的  所以在 你的第一个程序  是 0  1   第二个程序是 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-17 22:20:39 | 显示全部楼层
就看我这个

对比 参悟 然后懂了
#include<stdio.h>
int main()
{
       { int a=0;
        printf("%d\n",(a++ + a))      
       }  
       {
           int a = 0;        
           printf("%d\n",(a++,+a));           
        }

        {
            int a = 0;        
            printf("%d\n",(++a + a));         
        }

        {
            int a = 0;        
            printf("%d\n",(++a,+a));           
        }
        

        system("pause");
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-17 22:56:30 | 显示全部楼层
a++是先用后加  ++a是先加后用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-18 17:31:42 | 显示全部楼层
我顶你,实际上,这个问题,你只要自己debug调试一下就知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-18 17:42:57 | 显示全部楼层
我记得《C++PRIME》里有关于这点的介绍,好像i++这种情况与编译器有关,而且关系到拷贝的问题,所以一般都建议用++i这种形式。具体我忘了,你可以看看书。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-18 20:18:16 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

大神们都看过primer 啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-19 17:51:11 | 显示全部楼层
我看看是不是我的错,还是不是吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-19 18:12:02 | 显示全部楼层
我的鱼币,要鱼币,请给我吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-20 09:32:31 | 显示全部楼层
我知道你不知道我知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

想问的就是加和用的分界点在哪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

执行逗号运算不算下一个语句吧
想知道小甲鱼最近在做啥?请访问 -> 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你说你知道我就知道你知道了:titter:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

对比 参悟 然后懂了

恩,用我想的自加发生在逗号运算前其他所有运算后可以解释通,谢啦:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 11:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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