本帖最后由 初学C 于 2016-7-9 20:58 编辑
初始代码:
[mw_shl_code=c,true]#include<stdio.h>
#include <stdlib.h>
main()
{
int a=3,b=4;
printf("%d,%d,%d",a+=7,a,a+=4,++a);
system("pause");
}[/mw_shl_code]因为
a+=7,a+=4,++a
在一定(不是全部!)程度上,等价于:
a=a+7;
a=a+4;
a=a+1;
而printf函数会先将后面的值先计算出来!,于是这个程序
相当于:
[mw_shl_code=c,true]#include<stdio.h>
#include <stdlib.h>
main()
{
int a=3,b=4;
a=a+7;
a=a+4;
a=a+1;
printf("%d,%d,%d",a,a,a,a);
system("pause");
}[/mw_shl_code]又因为a+=7之类的又是赋值语句,所以,a的值也随之改变、
最好的测试方法是看一看a的值是不是真的被改变了.
于是,我写出了下列代码测试:
[mw_shl_code=c,true]#include<stdio.h>
#include <stdlib.h>
main()
{
int a = 0;
printf("最开始:%d\n",a);
printf("执行+=语句中:%d\n",a+=1);
printf("最后:%d\n",a);
system("pause");
return 0;
}[/mw_shl_code]
测试结果:
可以发现,a的值已经被改变.
所以,不难得出,因为printf += ++这些赋值语句改变了a的值
所以,a最后的值就是:15
你的啊哈C应该是开启了C99模式(C99标准编译),但是VC6是C89(C89标准编译)
编译的标准不同,结果自然不一样!
|