- int x =5 ; printf("%d\n",x++); printf("%d\n",++x);
- int x =5; printf("%d %d %d\n",++x,++x,++x);
- int x =5; printf("%d %d %d\n",x++,x++,x++);
- int x =5; printf("%d %d\n",++x,x++);
- int x =5; printf("%d %d\n",x++,++x);
1.
//声明:本程序在DevC++下测试
#include <stdio.h>
int main()
{
int x = 5;
printf("%d\n",x++); //单独输出这一句, 结果为5 (先用再加,用后再加)
printf("%d\n",++x); //单独输出这一句, 结果为6 (先加再用,现加现用)
return 0;
}
//申明:本程序演示于VC++6.0下
#include <stdio.h>
int main()
{
int x = 5;
printf("%d\n",x++); //该句单独执行,结果为 5
printf("%d\n",++x); //该句单独执行,结果为 6
return 0;
}
结论:由上可知,只要正确了前置自增和后置自增的区别,DevC++和VC++6.0下程序的表现并无不同。
2.
//声明:本程序在DevC++下测试
#include <stdio.h>
int main()
{
int x = 5;
printf("%d %d %d\n",++x,++x,++x); //单独输出这一句,结果为 8 8 8(注意,与VC++6.0下的结果不同)
return 0;
}
//申明:本程序演示于VC++6.0下
#include <stdio.h>
int main()
{
int x = 5;
printf("%d %d %d\n",++x,++x,++x); //该句单独执行,结果为8 7 6
return 0;
}
显然,同一个程序在两个不同的编译器下结果不同,这是为什么那?别急,你要是看完我接下来的代码,或许你会认同我的观点。
//声明:本程序在DevC++下测试
#include <stdio.h>
int main()
{
int x = 5;
int temp1; //注意:printf()函数的调用约定是从右向左
temp1 = ++x;
temp1= ++temp1;
temp1 = ++temp1;
printf("%d %d %d\n",temp1,temp1,temp1); //输出结果为8 8 8
return 0;
}
3
//声明:本程序在DevC++下测试
#include <stdio.h>
int main()
{
int x = 5;
printf("%d %d %d\n",x++,x++,x++); //单独输出这一句,结果为 7 6 5 (与VC++6.0下结果不一样)
return 0;
}
//申明:本程序演示于VC++6.0下
#include <stdio.h>
int main()
{
int x = 5;
printf("%d %d %d\n",x++,x++,x++); //该句单独执行,结果为5 5 5
return 0;
}
这里,同一个程序在两个不同的编译器下结果也不同,这又是为什么那? 也许我下面的过程分析能帮到你。
//申明:本程序演示于VC++6.0下
#include <stdio.h>
int main()
{
int x = 5;
//注意:printf函数的执行 类似于栈的原理
int temp1,temp2,temp3,temp4,temp5;
temp1 = x++;
temp4 = temp1; //暂存temp1的值
temp2 = temp1++;
temp5 = temp2; //暂存temp2的值
temp3 = temp2++;
printf("%d %d %d\n",temp3,temp5,temp4); //输出结果为5 5 5
return 0;
}
4
//声明:本程序在DevC++下测试
#include <stdio.h>
int main()
{
int x = 5;
printf("%d %d\n",++x,x++); //单独输出这一句,结果为7 5 (与VC++6.0下结果不一样)
return 0;
}
//申明:本程序演示于VC++6.0下
#include <stdio.h>
int main()
{
int x = 5;
printf("%d %d\n",++x,x++); //该句单独执行,结果为6 5
return 0;
}
//申明:本程序演示于VC++6.0下
#include <stdio.h>
int main()
{
int x = 5;
int temp1,temp2,temp3;
temp3 = x; //暂存x的值
temp1 = x++;
temp2 = ++temp1;
printf("%d %d",temp2,temp3);
return 0;
}
//该程序的输出结果为6 5
5
//声明:本程序在DevC++下测试
#include <stdio.h>
int main()
{
int x = 5;
printf("%d %d\n",x++,++x); //单独输出这一句,结果为6 7 (与VC++6.0下结果不同)
return 0;
}
//申明:本程序演示于VC++6.0下
#include <stdio.h>
int main()
{
int x = 5;
printf("%d %d\n",x++,++x); //该句单独执行,结果为6 6
return 0;
}
对此,以下是我的Demo.
//声明:本程序在DevC++下测试
#include <stdio.h>
int main()
{
int x = 5;
int temp1,temp2;
temp1 = ++x;
temp2 = temp1++;
printf("%d %d",temp2,temp1); //输出结果为6 7 (Devc++下也许就是这样处理的)
return 0;
}
//申明:本程序演示于VC++6.0下
#include <stdio.h>
int main()
{
int x = 5;
int temp1,temp2,temp3;
temp1 = ++x;
temp3 = temp1; //暂存temp1的值
temp2 = temp1++;
printf("%d %d",temp2,temp3); //输出结果为6 6
return 0;
}
写到这里,你们也看累了吧,至此,5个问题到分析完了,你发觉了什么?除了要明白前置自增与后置自增的区别,还要知道VC++6.0下处理过程中保存了多个暂存值。
还有续集,自己的看法,如有不对,大家请提出来。