C语言自加VC和VS中的自加结果不一样

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里面后置++没效果
在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语言里面能看到一些,不知道以后这种题目会不会消失。反正我们是不能写这种自加的。嗯,只是为了二级而已。

猜你喜欢

转载自blog.csdn.net/qq_41174677/article/details/88572012