首先是一段代码:

1          int a = 3;
2          printf("%d %d\n",a++,++a);
3          a = 3;
4          printf("%d %d\n",++a,a++");
View Code

输出分别是45和53。

原因是当函数传进来的不是变量而是一个表达式的时候,要先对表达式求值,求值的顺序是从右往左,于是第一条cout语句的步骤如下:

(1)先执行++a,a = 4,前置++返回对a的引用,将a的引用压入栈中;

(2)执行a++,将表达式的值4压入栈中,此时a=5,因为之前压入栈中的是a的引用,所以相应的栈中的值变为5;

(3)栈中的结果出栈,所以输出45.

同理,第二条cout语句也类似,但由于是先执行a++,后置++返回的仅仅是a的值,所以在执行++a后虽然a的值改变了,但栈中的第一个值不改变。

posted on 2013-12-11 13:55  lss1990  阅读(158)  评论(0编辑  收藏  举报