int n=1;printf( "%d %d %d\n ",n,n++,n--);输出为什么是1 1 1?
发布网友
发布时间:2024-10-14 23:15
我来回答
共4个回答
热心网友
时间:2024-10-14 23:39
首先需要明白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
热心网友
时间:2024-10-14 23:32
这不需要理解,这和编译器有关,不同编译器的编译顺序不同,n,n++,n--。有些编译器是从左向右编译的,有些事从右向左编译的,建议写成不容易出错的形式。
热心网友
时间:2024-10-14 23:39
这个的输出应该是1 1 2。
热心网友
时间:2024-10-14 23:34
++,--作为后缀时,是先取变量值参与到表达式运算中,等当前表达式结束后再++,--的
另外,有专家忠告,不要把带++,--的句子写在别的句子中,因为不同的编译器对这样句子会产生不同的编译结果,比如楼下这位的编译器,输出就是1 1 2.