今天在学习C语言的时候写到了如下的两端代码,简单来看,我一开始以为应该是一样的输出结果的,但是并不是这样。
#include <stdio.h>
int main()
{
int i=8;
printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);
return 0;
}
代码段1与其执行结果:
代码段2:
#include <stdio.h>
int 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--);
return 0;
}
代码段2与其执行结果:
一开始我是非常蒙的,但是后来网上找了一些资料以后发现,不同的编译器的求值的编译顺序是不同的。
我使用的编译器是gcc,它的计算的顺序(注意:不是输出的顺序。)是从右往左的,网上看到的是说C语言的压栈顺序是从右往左。
像代码段1的运算过程就是:
i=8 → 输出-i → i=i-1 → 输出-i → i=i+1 → 输出i → i=i-1 → 输出i → i=i+1 → i=i-1 → i=i+1 → 输出i(即在一段运算中++i与--i的值与i的最终值相同)。
而代码段2就是直接一个一个的输出,就是很正常的值了。
OwO,关于
即在一段运算中++i与--i的值与i的最终值相同
评论