问题描述
- count++的问题,++求解答
-
#include
int main()
{ int count=0;
printf("%d%d%d
",count++,count++,count++);
}
为什么结果是210?这个++到底是什么时候执行?
另外我将上面输出语句改成count=count++;然后再输出count,结果是0。。。
感觉好混乱,求真正明白的大神讲解
解决方案
首先,这个问题并没有一个标准的答案,依赖于编译器,不同的编译器结果很可能不同
但一般来说有一点是一样的,那就是printf压栈顺序是从右往左,然后根据第一个参数的format里的占位符依次弹栈,匹配占位符进行输出
不用刻意去研究为什么会得到这个结果,只要记住不要在一个表达式对同一个变量多次++,这是一个未定义的行为
如果楼主选定一个编译器了,那么可以继续问,不然没有太大研究的必要
同时,楼主你试试printf("%d%d%d
",count++,count++,++count);打印结果是不是出乎你意料了
哈哈,这里的前++和后++不仅涉及到了是先计算后加1还是先加1再参与计算,还涉及到了有的编译器会将前++会将引用压栈,而有的编译器却不会
PS:后++和前++的区别楼主应该是搞得清楚的吧。。。楼上的反正也解释的很清楚
也可以参考:http://bbs.csdn.net/topics/370153775
解决方案二:
因为表达式先从右边开始执行,所以先执行最右边的count++;count++又是先用count给值,然后++;说以该值为0;然后现在count为1,然后在计算中间那个count++;以此类推就是2,1,0
解决方案三:
是将一个int型累加得到最终结果
解决方案四:
++在参数之后 逗号 之后就执行!!!!!
++在参数之前,逗号 之前就执行!!!!!
但是我推算 应该是012
解决方案五:
在代码中,表达式先从右边开始执行,然后你count++,只后自增(先计算后自增),那么最开始打印是0,然互自增1,然后第二个打印的是2,以此类推最后个自然是3了
解决方案六:
printf("%d%d%d
",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 自增之前的值
不要和 ++ 在前的混淆
解决方案七:
jQuerry 方面的问题(求解答)
问题怎么解决,求解答,
函数指针问题,求解答