main( ) {int i,j,m,n; i=8;j=10; m=++i;n=j++; printf("%d,%d,%d,%d",i,j,m,n); getch(); }

哪位大侠可以帮我分析一下,每一步的步骤是这么做出来的,每一步的解释,答案为什么等于9,10,9,11.谢谢

希望下面的解释对你有帮助,看了之后你就明白怎么回事了。

自增自减运算符
这是一类特殊的运算符,自增运算符++和自减运算符--对变量的操作结果是增加1和减少1。例如:
--Couter;
Couter--;
++Amount;
Amount++;

看这些例子里,运算符在前面还是在后面对本身的影响都是一样的,都是加1或者减1,但是当把他们作为其他表达式的一部分,两者就有区别了。运算符放在变量前面,那么在运算之前,变量先完成自增或自减运算;如果运算符放在后面,那么自增自减运算是在变量参加表达式的运算后再运算。这样讲可能不太清楚,看下面的例子:
num1=4;
num2=8;
a=++num1;
b=num2++;

a =++num1;这总的来看是一个赋值,把++num1的值赋给a,因为自增运算符在变量的前面,所以num1先自增加1变为5,然后赋值给a,最终a也为5。b=num2++;这是把num2++的值赋给b,因为自增运算符在变量的后面,所以先把num2赋值给b,b应该为8,然后num2自增加1变为 9。
那么如果出现这样的情况我们怎么处理呢?
c=num1+++num2;
到底是c=(num1++)+num2;还是c=num1+(++num2);这要根据编译器来决定,不同的编译器可能有不同的结果。所以我们在以后的编程当中,应该尽量避免出现上面复杂的情况。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/edg_edu/archive/2009/04/03/4046539.aspx
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-06-16

首先你这答案是错的,我写出来是为了防止后面来搜的朋友看了错误的答案然后继续错下去。

首先++i是先自增再赋值,j++是赋值后再自增,相当于n是赋予j原本的值10,然后再自己+1所以显示j=11; n=10;而i是自增后赋值,m=9, i自己加了1所以也是9

第2个回答  2011-03-21
一楼你不会就不要误人子弟啊!我给你分析下!
这个主要是先++与后++的问题,你可以再详细的看下书!

i=8;//现在的i=8
j=10;//现在的j=10
m=++i;//++i的意思就是i先自加一次,是先++类型的,就是i=i+1;i=9;m=i;所以m也是9
n=j++;//j++是后++;j先赋值为原来的9不变,然后是n=j+1;n=11;所以n就是11啦!

然后输出就是你说的那样的啦!

希望对你有帮助!本回答被提问者采纳
第3个回答  2011-03-18
答案应该是9 11 9 10!
这是自加前置和后置的问题
第4个回答  2018-01-13

相似回答