2 qq 33561612 qq_33561612 于 2016.04.19 17:21 提问

count++的问题,++求解答

#include
int main()
{ int count=0;
printf("%d%d%d\n",count++,count++,count++);
}
为什么结果是210?这个++到底是什么时候执行?
另外我将上面输出语句改成count=count++;然后再输出count,结果是0。。。
感觉好混乱,求真正明白的大神讲解

7个回答

qq423399099
qq423399099   Ds   Rxr 2016.04.19 19:30
已采纳

首先,这个问题并没有一个标准的答案,依赖于编译器,不同的编译器结果很可能不同
但一般来说有一点是一样的,那就是printf压栈顺序是从右往左,然后根据第一个参数的format里的占位符依次弹栈,匹配占位符进行输出
不用刻意去研究为什么会得到这个结果,只要记住不要在一个表达式对同一个变量多次++,这是一个未定义的行为
如果楼主选定一个编译器了,那么可以继续问,不然没有太大研究的必要
同时,楼主你试试printf("%d%d%d\n",count++,count++,++count);打印结果是不是出乎你意料了
哈哈,这里的前++和后++不仅涉及到了是先计算后加1还是先加1再参与计算,还涉及到了有的编译器会将前++会将引用压栈,而有的编译器却不会
PS:后++和前++的区别楼主应该是搞得清楚的吧。。。楼上的反正也解释的很清楚
也可以参考:http://bbs.csdn.net/topics/370153775

qq_33561612
qq_33561612 thanks
一年多之前 回复
f313210393
f313210393   2016.04.19 17:36

因为表达式先从右边开始执行,所以先执行最右边的count++;count++又是先用count给值,然后++;说以该值为0;然后现在count为1,然后在计算中间那个count++;以此类推就是2,1,0

qq_29492041
qq_29492041   2016.04.19 17:27

是将一个int型累加得到最终结果

ge00111
ge00111   2016.04.19 17:38

++在参数之后 逗号 之后就执行!!!!!
++在参数之前,逗号 之前就执行!!!!!
但是我推算 应该是012

Mr_li13
Mr_li13   2016.04.19 17:49

在代码中,表达式先从右边开始执行,然后你count++,只后自增(先计算后自增),那么最开始打印是0,然互自增1,然后第二个打印的是2,以此类推最后个自然是3了

niaonao
niaonao   Rxr 2016.04.19 18:06

printf("%d%d%d\n",count++,count++,count++);
count++ 等价于 count = count + 1;
++在后面,先给出数据后执行++,
从右边开始执行,
count++;先输出对应的 %d 值为 0 ,然后自增一,count = count + 1;值 为 1;
然后对于倒数第二个 count++,现在 count 值为 1,先输出对应的 %d 值为 1,然后自增 count = count + 1;值为 2
对于倒数第三个(正数第一个),count++ ,对应输出现在的值先,即是 %d 对应输出2,然后count = count + 1; 值为 3
到此程序执行完了。最终值 为 3 但输出的不是最终值,二是在 count 自增之前的值

不要和 ++ 在前的混淆

CSDNXIAON
CSDNXIAON   2016.04.19 21:01

jQuerry 方面的问题(求解答)
问题怎么解决,求解答,
函数指针问题,求解答
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!