int n=1;printf( "%d %d %d\n ",n,n++,n--);输出为什么是1 1 1?

来源:百度知道 编辑:UC知道 时间:2024/05/23 13:15:02
我是vc6.0运行结果是1,1,1 可我觉得无法理解

++,--作为后缀时,是先取变量值参与到表达式运算中,等当前表达式结束后再++,--的

另外,有专家忠告,不要把带++,--的句子写在别的句子中,因为不同的编译器对这样句子会产生不同的编译结果,比如楼下这位的编译器,输出就是1 1 2.

首先需要明白3个概念:
1.
printf函数编译的时候,表达式是从右向左计算的。输出的时候是从左向右输出的。
所以表达式的计算顺序为:n--,n++,n
输出的时候,从左向右输出"%d %d %d\n "的结果
2.
这个是比较容易忽视的:
变量是栈式存储的,所以不论n--,n++,n中的那个运算,都是对同一个栈地址中的数据进行处理,
所以任何一个处理都会影响"%d %d %d\n "的3个输出结果,
因为他们都是输出的同一个栈空间内的数据

所以:
n--:表达式结果为1,运算后n为0
n++:表达式结果为0,运算后n为1
所以最后存放n值的栈空间内的数据为1

输出结果为:1 1 1

这不需要理解,这和编译器有关,不同编译器的编译顺序不同,n,n++,n--。有些编译器是从左向右编译的,有些事从右向左编译的,建议写成不容易出错的形式。

这个的输出应该是1 1 2。