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语言里面能看到一些,不知道以后这种题目会不会消失。反正我们是不能写这种自加的。嗯,只是为了二级而已。
C语言自加实验对比
本文对比了VC和VS编译器下C语言自加运算符的行为差异,特别是在函数传参和赋值表达式中。VC中前置++仅影响自身及前导参数,而后置++仅影响自身;VS中前置和后置++的影响更为复杂,前置++影响所有参数,后置++影响后续的前置和后置++。实验展示了不同编译器对自加运算符处理的未定义行为。
925

被折叠的 条评论
为什么被折叠?



