今晚有一个学弟问我这样一个问题:
#include<stdio.h>
int main()
{
int a=3,b,c,d;
b=(++a)+(++a)+(++a);
a=3;
c=(a++)+(a++)+(a++);
a=3;
d=++a+6;
printf("b=%d\nc=%d\nd=%d\n",b,c,d);
return 0;
}
大家可以运行一下:在windows下: VC的结果是:16 9 10
wintc的结果是:18 9 10
Linux的结果是:16 9 10
这是为什么呢?后来想了一下:其实对于不同的 OS和 编译器是不一样的,虽然平时我们没有写这么纠结的代码,但是呀研究研究还是有意思的、、、
解释:
VC 和 Linux下的计算机处理机制是:
对于b:先执行++a,然后再是++a,然后执行第一个个 +号,此时注意a的结果是5,而不是4和5,所以(++a)+(++a)的结果是10不是9!!! ,这个值是保存在一个temp的变量中的!!!那么后面一个就好解释了,那么后面a就是6,所以结果是16;;;
wintc下:
对于b,他是首先将++a全部执行完,那么a最终的值是6,那么结果是相当于3个6相加,就是18,他是没有中间变量temp作为临时储存的!!!
但是对于C 来说是一样的,因为a++是后向操作,对于+和a++来说是先执行+的,所以最终结果是9 OK!
对于d来说就很简单了,不解释、、、
对于不同的编译器是不一样的,所以大家要注意了、、、O(∩_∩)O~