c语言关于运算符的问题

来源:百度知道 编辑:UC知道 时间:2024/07/07 20:42:28
#include <stdio.h>
void main()
{
int m,j=5,t;
t=(++j)+(j++)+(++j)+(j++);
printf("t=%d,j=%d\n",t,j);//26,9
j=5;
m=(j++)+(++j)+(j++)+(++j)+(++j)+(j++)+(++j);
printf("m=%d j=%d \n",m,j);//50 12
j=5;
t=(j++)+(++j)+(j++);
printf("t=%d,j=%d\n",t,j);//18,8
}
楼3,说到点子上了 。但我仍不明白是为何结果为 18?
还有另外上面两个运行结果 到底是如何 得出的呢?
鄙人实在发闷。
望之情者予以解答。
谢谢!

++在前九先执行j后在加,比方j=1;1+(j++)则先是1+j,当然1+j=2了,然后是执行j++,这时j=2了,如果是1+(j++)+j的话,结果就改是1+1+2=4了,你推敲下是不是这样
int m,j=5,t;
t=(++j)+(j++)+(++j)+(j++);//6+6+8+8
printf("t=%d,j=%d\n",t,j);//28,9
这里我用vs2005编译的是28,9,和你的26,9部一样,这个可能产生的原因是编译器,对于不同的编译器其执行步骤有所差异的

++j,先自增再运算
j++,先运算再自增

楼上的别一笔带过,你们仔细算一下结果
比如j=5;t=(j++)+(++j)+(j++);
按你们的应该是17,可是结果是18.

第一块 int m,j=5,t;
t=(++j)+(j++)+(++j)+(j++);
j的初值为5,++j为先自加1后使用,即第一个括号值为6,同时j变为6;第二个括号中先采用j的值参与运算,后自加1,即第二个括号值为6,同时j变为7;第三个括号考虑同1,括号值为自加后的8,同时j变为8;第四个括号考虑同2,括号值为8,同时j自加变为9;所以
t=6+6+8+8=28,j=9;
第二块
j=5;
m=(j++)+(++j)+(j++)+(++j)+(++j)+(j++)+(++j);
j的初值为5;第一个括号值为5,j自加为6;第二个括号先自加,值为7,j为7;第三个括号值为7,后j自加为8,第四个括号值为9,j为9,第五个括号值为10,j为10;第六个括号值为10,后j自加为11;第七个括号值为12,j为12;所以
m=5+7+7+9+10+10+12=60,j=12;
第三块 j=5;
t=(j++)+(++j)+(j++);
j初值为5,第一个括号值为5,j自加为6;第二个括号值为7(j先自加后参与运算),j为7;第三个括号值为7,j后自加变为8;所以