C语言自加自减的问题

执行以下程序段后的输出结果是( )。
int x = 3;
int m, n;
n = (++x) + (++x);
m = (x--) + (x--);
printf("%d %d\n", m, n);
A、10 6
B、9 9
C、10 10
D、10 8

答案是选C,我怎么算都是7,9,求高人指导啊

他这个是X变量的存储问题。先看
n = (++x)+(++x);
从右至左,先算++x,x=4,这里x在寄存器里的值是4,再算++x,x=5。
注意,关键点来了,那这时候,n是等于4+5吗,不是的。
在进行加法时,A+B,寄存器会在得到A,B的值以后才会开始加法计算,现在,A,B的地址都指向X,当最后x=5时,实际上把A的值也做了改变,变成了5,千万不要想当然认为有一个临时变量来保存开始x=4的值,没有的。所以结果自然是x+x = 10
同理到x--
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-10-31
1、C语言中,后置自增(自减)是在执行完所在语句后,变量的值再自增(自减)。
2、举例说明如下:
int num=0, s=0;
while(num++<3)
{
s = s + num;
}
// 第1次执行while时,num=0,第1次执行完while后,num=1,此时,s=0+1=1
// 第2次执行while时,num=1,第2次执行完while后,num=2,此时,s=1+2=3
// 第3次执行while时,num=2,第3次执行完while后,num=3,此时,s=3+3=6
// 第4次执行while时,由于num=4>3,所以推出循环,最后s=6
第2个回答  2011-10-13
你要知道“++”,“--”在变量前后的区别。
在前,比如“++x",是先将自增,再赋值,那么n = (++x)+(++x)就是4+5 = 9
然后,“x--"就是先赋值再自减,那么刚刚经过n = (++x)+(++x)后,x=5,带入m=(x--)+(x--)还是等于9。
我觉得答案错了,不要迷信答案,你自己到VC或者Turbo C上跑一下不就解决了。追问

这是道竞赛题,编译环境是在TC1.9,我跑过了,答案就是10,10的,郁闷了啊

追答

我在MS C下跑了,也是10,10,我知道原因了。
我的教材上有一章就是讲这个原理的,和编译器有关:
m = (++i)+(++i);先将i自增两次,然后才计算表达式(5+5);
n = (i--)+(i--);用i的原值先运算(5+5),再自减两次;

不信,你把我的代码去跑一次
int x = 3;
int m(0),n(0);
m = (++x)+(++x);
printf("x = %d\n",x);
n = (x--)+(x--);
printf("x = %d\n",x);
printf("m=%d,n=%d\n",m,n);
应该是
x = 5;
x = 3;
m = 10,n = 10

本回答被提问者采纳
第3个回答  2011-10-13
因为++x是先把x自加1,然后再运算。第一次++x,x=4,第二次++x,x=5;然后n=x+x,n=5+5;
因为x--是先运算再自减1,所以m=5+5;m=10

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网