看下这段程序与输出结果我不明白,帮帮忙

来源:百度知道 编辑:UC知道 时间:2024/05/23 20:07:35
小程序:main()
{int x,y,m,n;
x=10;y=20;
m=x++;n=++n;
printf("x=%d,y=%d,m=%d,n=%d",x,m,n);
m=x--;n=--y;
printf("x=%d,y=%d,m=%d,n=%d",x,m,n);
}
输出结果:x=11,y=10,m=2035,n=2034,x=10,y=11,m=19,n=2034

我用方括号把一个变量括住,表达它的值,对你这个问题进行说明。
(比如当x=10时,[x]表示x的值10。)

首先
x=10;y=20;
m=x++;n=++n;
那么m=10,因为( ++ 写在变量后面)是x先把值赋给m再自增,自增之后x的值为11;
对于n,没有赋初值,其值取自未知内存地址块上的一个值(你这里是这种情况,有的编译器默认值为0),n=++n 就是自增1,你这里n的最后结果是2035。

第一个printf函数:
printf("x=%d,y=%d,m=%d,n=%d",x,m,n);
你这里有4个要输出的值,但是你只给了3个,第4个就由系统在内存区中乱给你取一个输出了。
输出实际上是:
x=[x],y=[m],m=[n],n=[未知内存地址块上的值]
所以结果是
x=11,y=10,m=2035,n=2034
注意:2034是系统乱取的值。

到输出结果这一步,可以确定4个变量的值分别是:
x=11,y=20,m=10,n=2035
接下来,
m=x--;n=--y;
那么又得到了新的值:
m=11,n=19,x=10,y=19

所以,
第二个printf函数:
printf("x=%d,y=%d,m=%d,n=%d",x,m,n);
输出实际上是:
x=[x],y=[m],m=[n],n=[未知内存地址块上的值]
显示出来结果就是:
x=10,y=11,m=19,n=2034
注意:2034是系统乱取的值。

基本过程就是这样的。

一切结果皆缘于你漏写了一个‘y',如果你两次的printf函数是这样写:
printf("x=%d,y=%d,m=%d,n=%d",x,y,m,n);
那么就不会有这么多莫名奇妙的数值了。