C语言自加实验(VC和VS的结果不同)
其实这个确实没什么必要吧,但是二级需要啊!而且我在qq群里经常看见有人问这个,所以,就写这个自加的一些实验。
一、自加与函数传参
1、 VC
前置++ 影响前面所有的参数包括自己 不对后面的参数产生影响
后置++ 不对任何参数产生影响
2、 VS
后置++不会对自己有影响 但对前面的后置++有影响,且对所有的前置++有影响
前置++ 对自己有影响 对前面的后置++有影响 且对所有的前置++有影响
#include<stdio.h>
void fun(int a,int b){
printf("a=%d,b=%d\n",a,b);
}
int main(){
int a=1,b=1,c=1;
fun1(a++,++a,a++);
fun1(++b,b++,b++);
fun1(c++,++c,++c);
return 0;
}
VC(左)和VS(右)
二、 自加的赋值
在VC和VS里面后置++没效果
在VC里面前置++ 只有最前面的两个变量会互相影响 其他的变量都只影响自己和后面的变量
在VS里面前置++会对所有的变量产生影响
int a=1;
int d=a++ + ++a + a++ + ++a;
VC:d的值为:9;
VS:d的值为:12
int d=a++ + a++ + a++ + a++;
VC:d的值为:4;
VS:d的值为:4
书上说这种行为是未定义行为,自加是根据编译器的不同而不同,平常这种自加基本是看不到的,也只有在二级C语言里面能看到一些,不知道以后这种题目会不会消失。反正我们是不能写这种自加的。嗯,只是为了二级而已。