初学C语言,关于++a + a++ 在Windows和Linux中运行结果不同非常懊恼
#include "stdio.h"
int main()
{
int a = 1;
printf("++a + a++ = %d\n",++a + a++);
int b = 1;
printf("++b + ++b + ++b + ++b = %d\n", (++b) + (++b) + (++b) + (++b));
return 0;
}
Windows下运行结果:
++a + a++ = 4
++b + ++b + ++b + ++b = 20
Linux下运行结果:
++a + a++ = 5
++b + ++b + ++b + ++b = 15
两者结果完全不同。
首先阐述一下我个人理解,希望各位大神帮忙指点指点哪里有错,万分感激。
Windwos下运行结果为4,是因为先计算a++,此时相当于生成一个临时变量temp =1,而a=2,然后计算++a,此时使用a本体,也就是++2,结果就成为 3+1=4;
结果为20,是因为第一个++b之后,b的值变为2,第二个++b之后,b的值变为3,依次算到第四个++b的时候,b的值变为5,因为前置++使用的是变量本体,所以就变成了4个5相加,结果就成了20。
Linux下为什么等于5,笨拙的我实在没想出来是为什么,希望大神帮忙解释解释。至于等于15,是不是因为Linux的运算方式与Windows不同,其计算方式是第一个++b后,b=2,第二个++b之后,b=3,此时,会先将前两个++b进行相加,并且使用b本体,也就是3+3=6,而计算第三个++b的结果是4,此时再进行相加,6+4=10,最后计算第四个++b,4+1=5,然后相加结果为10+5=15.
以上是个人理解,望各位大神帮忙指点指点,万分感激