user-0 提问: 我用的是VC6.0编译，请问一下关于i++,i--,++i,--i,的问题

回复:
user: user-0
content: 谢谢你们的回答，让我受益匪浅，自己在看一遍之后明白了，置顶帖我也看了，水平有限并没有很看懂，但稍微理解了一点，谢谢。  引用 14 楼 lin5161678 的回复:[quote=引用 13 楼 t313732838 的回复:] 我就不明白了？不是从右往左压栈？用压栈来解释完全可以解释得通。技术是靠自己理解的。不是别人说什么就是什么！我就不明白你这种人怎么想的。动不动就说别人新手，动不动就把别人的完全否定了。你貌似很牛？发的专业论文在哪里？学历很高？论坛是集思广益的地方。不是你这种仗着有几年经验就到处否定人的人该来的。人与人之间最起码的尊重都不懂。你还能成什么事！ 我否定是因为你误导别人  另外我也没说你新手  至于我说别人新手 ...... 别人是新手 我为什么不能说出来?  另外 不是解释得通就是对的  解释得通 造成的误导更严重  阻止你误人子弟有什么不对?  起码的尊重?  笑话 我第一次见到 尊重是靠要求别人得来的 你难道不知道 脸是自己挣的 人是自己丢的这句话? 你自己丢人了 怪我咯?  让你去看置顶帖你看了没有 看懂了没有? 遇到质疑第一反应不是弄清楚自己是对是错  责怪别人 你不能说我错 你说我错就是不尊重我? 还给你这句话 "你还能成什么事！"  再告诉你一点 这里起决定性作用的是 求值顺序  而求值顺序不一定和压栈顺序绑定 完全可能出现 全部参数求值完毕之后 才按照从右向左的顺序压栈  最后 上图打脸   再说一句 人是自己丢的 别怨别人不尊重你 先审视一下自己是不是做到令人尊重?[/quote]  引用 9 楼 fei243660702 的回复:引用#include <stdio.h> int main() { int i=8,j=8; printf("%d %d %d %d\n",i,j,++i,j++);}  此题答案是9 8 9 8 为什么不是8 8 9 9 跟编译器有关么？还是什么问题。  #include<stdio.h> main() { int i=8; printf("%d\n",++i); printf("%d\n",--i); printf("%d\n",i++); printf("%d\n",i--); printf("%d\n",-i++); printf("%d\n",-i--); }  此题答案是 9   这个明白  8   这个明白 8   这个明白 9   从这个开始就不明白了，怎么会是9，为什么不是8. -8  这个也不明白 -9  这个也是不明白 第四个开始：第三个i在输出后又加一，所以是9； 输出9后又减一，所以是-8；之后i又加一所以是-9 引用 5 楼 zhao4zhong1 的回复:http://bbs.csdn.net/topics/370153775

user: user-1
content: 引用 13 楼 t313732838 的回复:我就不明白了？不是从右往左压栈？用压栈来解释完全可以解释得通。技术是靠自己理解的。不是别人说什么就是什么！我就不明白你这种人怎么想的。动不动就说别人新手，动不动就把别人的完全否定了。你貌似很牛？发的专业论文在哪里？学历很高？论坛是集思广益的地方。不是你这种仗着有几年经验就到处否定人的人该来的。人与人之间最起码的尊重都不懂。你还能成什么事！ 我否定是因为你误导别人  另外我也没说你新手  至于我说别人新手 ...... 别人是新手 我为什么不能说出来?  另外 不是解释得通就是对的  解释得通 造成的误导更严重  阻止你误人子弟有什么不对?  起码的尊重?  笑话 我第一次见到 尊重是靠要求别人得来的 你难道不知道 脸是自己挣的 人是自己丢的这句话? 你自己丢人了 怪我咯?  让你去看置顶帖你看了没有 看懂了没有? 遇到质疑第一反应不是弄清楚自己是对是错  责怪别人 你不能说我错 你说我错就是不尊重我? 还给你这句话 "你还能成什么事！"  再告诉你一点 这里起决定性作用的是 求值顺序  而求值顺序不一定和压栈顺序绑定 完全可能出现 全部参数求值完毕之后 才按照从右向左的顺序压栈  最后 上图打脸   再说一句 人是自己丢的 别怨别人不尊重你 先审视一下自己是不是做到令人尊重?

user: user-2
content: 引用 12楼lin5161678 的回复:[quote=引用 11 楼 t313732838 的回复:] printf是从右往左压栈！ 所以输出的时候计算顺序是这样的 j++，++i，j，i。 j++后 j仍然是8，++i后i变成9。 就这样。别胡思乱想  和压栈顺序毫无关系  你先看看置顶帖 弄清楚这一点再说吧[/quote]我就不明白了？不是从右往左压栈？用压栈来解释完全可以解释得通。技术是靠自己理解的。不是别人说什么就是什么！我就不明白你这种人怎么想的。动不动就说别人新手，动不动就把别人的完全否定了。你貌似很牛？发的专业论文在哪里？学历很高？论坛是集思广益的地方。不是你这种仗着有几年经验就到处否定人的人该来的。人与人之间最起码的尊重都不懂。你还能成什么事！

user: user-1
content: 引用 11 楼 t313732838 的回复:printf是从右往左压栈！ 所以输出的时候计算顺序是这样的 j++，++i，j，i。 j++后 j仍然是8，++i后i变成9。 就这样。别胡思乱想  和压栈顺序毫无关系  你先看看置顶帖 弄清楚这一点再说吧

user: user-2
content: printf是从右往左压栈！ 所以输出的时候计算顺序是这样的 j++，++i，j，i。 j++后 j仍然是8，++i后i变成9。 就这样。

user: user-3
content: 莫名其妙的题目，匪夷所思的答案。居然还能自圆其说

user: user-4
content: http://bbs.csdn.net/topics/370153775

user: user-5
content: 引用#include <stdio.h> int main() { int i=8,j=8; printf("%d %d %d %d\n",i,j,++i,j++);}  此题答案是9 8 9 8 为什么不是8 8 9 9 跟编译器有关么？还是什么问题。  #include<stdio.h> main() { int i=8; printf("%d\n",++i); printf("%d\n",--i); printf("%d\n",i++); printf("%d\n",i--); printf("%d\n",-i++); printf("%d\n",-i--); }  此题答案是 9   这个明白  8   这个明白 8   这个明白 9   从这个开始就不明白了，怎么会是9，为什么不是8. -8  这个也不明白 -9  这个也是不明白 第四个开始：第三个i在输出后又加一，所以是9； 输出9后又减一，所以是-8；之后i又加一所以是-9

user: user-6
content: 搞清楚先后就行了

user: user-7
content: 何必总是纠结于此....

user: user-8
content: ++i与i++ 同为表达式，这种表达式我们称之为是有副作用的表达式，也就是说这种表达式除了有自身的值以外，还会修改i的值，前面两个表达式都会让i的值增加一，不同的是前边是先让i的值增加1作为表达式的值，后边是先让i的值作为表达式的值

user: user-9
content: 请看本版置顶

user: user-10
content: C编译器自动优化 所以复杂的自加自减运算的结果有不确定性。所以尽量少的用这种自加自减运算。 《C   Primer   Plus（第五版）》的101页讲的这个问题。

user: user-1
content: printf("%d %d %d %d\n",i,j,++i,j++); 看置顶帖  printf("%d\n",i--); 上面的 i++ 会把 i 的值设为 9 注意上面输出的是 i++ 的值 不是 i 的值  printf("%d\n",-i++); -(i++) 表达式 i++的值是 8 结果输出 -8 下面的printf同理

user: user-11
content: 前面的先 +  后用, 后面的先用后加