c语言自增运算

发布时间:2024-05-20 06:13 发布:上海旅游网

问题描述:

main(){
int i = 3;
int j = (++i) + (++i) + (++i);
i =3;
int k = i+++i+++i++;
printf("j = %d \n",j);
printf("k = %d \n",k);
printf("i = %d\n",i);

scanf("%d",&i);
}
main(){
int i = 3;
int j = 0;
for(int t = 0 ; t < 3;t++){
j += ++i;
// printf("j = %d \n",j);
}
i =3;
int k = i+++i+++i++;
printf("j = %d \n",j);
printf("k = %d \n",k);
printf("i = %d\n",i);

scanf("%d",&i);
}
这两个函数的j值为什么不同?

问题解答:

第一个式子j=6+6+6=18
第二个式子: j=j+(++i) j= 4+5+6 = 15

另:
C标准只规定了相邻运算符的运算次序,
如(表达式1)+(表达式2)+(表达式3)。标准却没有规定表达式1,2,3的计算顺序,只规定了要先计算 表达式1/2/3的值。
这样在不同的编译器结果会不同!
如:j=(i--)+(i++)+(i++);j的值在不同编译器里面计算顺序不一样。

第一个j = (++i) + (++i) + (++i);
这个式子运算时是从左往右依次对三个括号里的表达式进行运算,就是(++i)进行三次,然后三个括号表达式的值都是6,所以j=18;
第二个for(int t = 0 ; t < 3;t++){
j += ++i; 这个式子相当于j=j+(++i);
因此t=0,j=4;t=1,j=4+5=9;t=2,j=9+6=15;

麻烦死了,谁出的题啊。一个表达式里同一个变量不要多次自增,不然不同的编译器有不同的结果。

这个题出的那叫一个相当的不错!
如果是我估计得做会呢!哈哈 !

热点新闻