迷猪 发表于 2014-12-14 19:31:01

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

<div class="blockcode"><blockquote><p>
</p><p>#include<stdio.h>
void main()
{
int a=0;
printf("%d %d",a++,a);
} // 00</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>

迷猪 发表于 2014-12-14 19:40:38

之前看到过说是整个表达式求值之后再自加,那int i=3;k=(i++)+(i++)+(i++);k=9i=6 这种可以理解,那按理说(a++,a),应该在逗号运算符执行完了a才+1,那逗号运算的结果不应该是0吗:cry

xjc_621105 发表于 2014-12-15 17:33:44

先求解a++,再求解a,逗号表达式求解是顺序执行完成之后,返回第二个表达式的值,所以是1

迷猪 发表于 2014-12-16 23:20:55

额,我后来理解为,+1运算优先顺序比赋值运算低但比逗号运算高,是这个意思吗

迷猪 发表于 2014-12-16 23:22:03

xjc_621105 发表于 2014-12-15 17:33
先求解a++,再求解a,逗号表达式求解是顺序执行完成之后,返回第二个表达式的值,所以是1

额,我后来理解为,+1运算优先顺序比赋值运算低但比逗号运算高,是这个意思吗

只為不段前行 发表于 2014-12-17 12:28:40

其实 你可以这样理解的 a++ 分解成 先 a=a 然后a=a+1,这其中a=a+1 是执行下个语句要用的 而不是当前要用到的所以在 你的第一个程序是 01   第二个程序是 1

hapizz 发表于 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;
}

赵晓玉 发表于 2014-12-17 22:56:30

a++是先用后加++a是先加后用

ganlei00 发表于 2014-12-18 17:31:42

我顶你,实际上,这个问题,你只要自己debug调试一下就知道了

GRRRARD 发表于 2014-12-18 17:42:57

我记得《C++PRIME》里有关于这点的介绍,好像i++这种情况与编译器有关,而且关系到拷贝的问题,所以一般都建议用++i这种形式。具体我忘了,你可以看看书。

fishczq 发表于 2014-12-18 20:18:16

学习学习

小海儿~ 发表于 2014-12-18 20:29:06

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

大神们都看过primer 啊{:9_239:}

ganlei00 发表于 2014-12-19 17:51:11

我看看是不是我的错,还是不是吧

ganlei00 发表于 2014-12-19 18:12:02

我的鱼币,要鱼币,请给我吧

ganlei00 发表于 2014-12-20 09:32:31

我知道你不知道我知道

迷猪 发表于 2014-12-24 11:35:03

赵晓玉 发表于 2014-12-17 22:56
a++是先用后加++a是先加后用

想问的就是加和用的分界点在哪

迷猪 发表于 2014-12-24 11:36:05

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

执行逗号运算不算下一个语句吧

迷猪 发表于 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

迷猪 发表于 2014-12-24 11:46:47

ganlei00 发表于 2014-12-20 09:32
我知道你不知道我知道

你说你知道我就知道你知道了:titter:

迷猪 发表于 2014-12-24 11:49:16

hapizz 发表于 2014-12-17 22:20
就看我这个

对比 参悟 然后懂了


恩,用我想的自加发生在逗号运算前其他所有运算后可以解释通,谢啦:lol:
页: [1] 2
查看完整版本: a++具体在什么时刻才执行+1这一步啊