C语言 一个题目

来源:百度知道 编辑:UC知道 时间:2024/06/17 18:47:19
main()
{int i=3,j=3,k=0,m=3,n=0,l=3,a=5,b=5;
k=(j++)*(++j)+(j--)*(--j); .....1
n=(l++)+(l++)+(l++); .....2
printf("k=%d i=%d m=%d n=%d\n",k,(i++)*(++i)+(i--)*(--i),(m++)+ (m++)+(m++),n); .....3
printf("a=%d b=%d (b=(b--)+3)=%d b=%d\n",a,b,b=(b--)+3,b); .....4
}
希望能把1,2,3,4过程说一下,越详细越好。先谢谢各位了。
结果是 18 30 12 9
7 8 8 5
turbo C&C++3

// 楼上回答有误,如果看了说明不清楚,
// 就用编译器验证一下吧。
// 实际使用时,别写这种代码 --! 不同编译器解释可能不同

int i=3,j=3,k=0,m=3,n=0,l=3,a=5,b=5;

// 同一个语句内,是会把j的值一次性全部取出来
// 再分别进行++等操作的,原则就是这样.
// 计算后k值 3*4+3*2=18,j加2次减2次,保持不变
k = (j++) /*取3*/
*(++j) /*取4*/
+
(j--) /*取3*/
*(--j); /*取2*/

// 同上,计算后n值为9,l的值为6
n = (l++) /*取3*/
+(l++) /*取3*/
+(l++); /*取3*/

printf("k=%d i=%d m=%d n=%d\n",
k, /*取18*/
(i++)*(++i)+(i--)*(--i), /* 3*4 + 3*2 = 18*/
(m++)+(m++)+(m++), /*取9*/
n /*取9*/
);

printf("a=%d b=%d (b=(b--)+3)=%d b=%d\n",
a, /*取5*/
b, /*取7*/
b=(b--)+3, /*取8,由于=修改b的值,高一层运算,存在缓存值*/
b /*取7*/
);

======
你用哪个编译器的?VS2005的结果不是这样

其实就是一个++ --的问题啊
相当于+1,-1
只是一个在前,一个在后。但是那你这里都加了括号的。就没影响了
就把它看做+1,-1就行了

1.j++, 先取j的值3, j++, 此时j=4, ++j,j此时值为5. j--,先取j的值,j此时还等于5,然后算完