在不同的编译其中,i++和++i有着不同的解释,可是为什么在同一个编译器里,利用不同的语句会有不同的解释呢?
(由于我在整理的时候数据有些乱,所以可能一些结果会有问题,但是只要大家明白我的意思就可以了.)
(以下,左边均为第一中情况,右边为相应的第二中情况):
注意:有我希望易于比较,所以分成两边来写,可是好象在排版上有些问题,所以建议大家把下面的内容复制到记事本里,然后把记事本最大化,这样比较清楚!!!!!!!
1.在VC++6.0里:
一:
#include <iostream.h> #include <iostream.h>
void main() void main()
{ {
int i=3,count; int i=3;
count=(i++)+(i++)+(i++); ----------------------> cout<<(i++)+(i++)+(i++)<<endl;
cout<<count<<endl; cout<<i<<endl;
cout<<i<<endl; }
}
这时:i=6;count=9 这时:i=6; (i++)+(i++)+(i++)=9
"左边的结果和右边的相等"
二:
#include <iostream.h> #include <iostream.h>
void main() void main()
{ {
int i=3,count; int i=3;
count=(++i)+(++i)+(++i); ----------------------> cout<<(++i)+(++i)+(++i)<<endl;
cout<<count<<endl; cout<<i<<endl;
cout<<i<<endl; }
}
这时:i=6;count=16 这时:i=6; (++i)+(++i)+(++i)=25
"现在注意:左边的结果和右边的不一样了"
2.在TC2.0中:这种情况依然
一:
#include <stdio.h> #include <stdio.h>
void main() void main()
{ {
int i=3,count; int i=3;
count=(i++)+(i++)+(i++); -----------------------------> printf("%d\n",(i++)+(i++)+(i++));
printf("%d\n",count); printf("%d\n",i);
printf("%d\n",i); }
}
这时:i=6; count=9 这时:i=6; (i++)+(i++)+(i++)=12
"这是候左右就不同了!!"
二:
#include <stdio.h> #include <stdio.h>
void main() void main()
{ {
int i=3,count; int i=3;
count=(++i)+(++i)+(++i); -----------------------------> printf("%d\n",(++i)+(++i)+(++i));
printf("%d\n",count); printf("%d\n",i);
printf("%d\n",i); }
}
这时: i=6; count=18 这时:i=6; (++i)+(++i)+(++i)=15
"这时候两边也不一样"
3.在Jdk6中:由于好奇心,我把相同的概念拿到Java的编译器Jdk6中调试
不过和VC++6.0和TC2.0不同,在两中情况下,输出结果均为:i=6; (i++)+(i++)+(i++)=12; (++i)+(++i)+(++i)=15
我想:在VC++6.0和TC2.0下,按道理来说两中情况结果应该是一样的,因为这两种情况只是用不同的语句完成相同的效果,可是他们的结果为什么不一样????
对于以上的论述,希望大家可以谈出自己的观点!!!!