c++ 为什么输出是这样
第一,你先看明白下面这段话的含义:
如果有表达式 a = i++ 它等价于 a = i ; i = i + 1;
如果有表达式 a = ++i 它等价于 i = i + 1; a = i;
1 首先两者的区别是:前者是先赋值,然后再自增;后者是先自增,后赋值
看好没。举例说明:
int i = 2;
则上面的式子为:
a = 2++ =>> a = 2; i = 2 +1; =>> a = 2; i = 3;
a = ++2 =>> i = 2+1;a = i; =>> a = 3; i = 3;
明白这点了把。虽然最后i都等于3,但是a却结果不一样;这就是i++和++i的区别。
第二,明白上面这点了,继续:
c和c++编译运行的时候,顺序是不一样的。
编译的时候,是从最右侧开始,运行的时候是从最左侧开始的。
记住并且明白以上两点。开始看你的代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int i = 3;
printf("%d,%d,%d,%d,%d\n",i,i++,++i,i++,i);
system("pause");
return 0;
}
依照编译规则,先右后左(全都倒数):
最右侧i = 3.
倒数第二i = 3(先赋值在++);
倒数第三i = 5(在这句话执行前,i已经在上一句的时候变成4了,所以这句先++,在赋值为5);
倒数第四i = 5(先赋值在++);
倒数第五(正数第一)i = 6(上句编译完后,i = 6,这句直接赋值);
再运行,从左往右(全都正数):
最左侧:i = 6;
第二:i = 5,因为编译到这里的时候,也就是上面的倒数第四那里,i = 5.
第三:i = 6,因为编译到这里的时候,也就是上面的倒数第三那里,i = 5,但是这句的先++,在赋值。
第四:i = 3,因为编译到这里的时候,也就是上面的倒数第二那里,i = 3.
第五:i = 6;
纯手打,望采纳!