i++和++i或者i--和--i的运算有什么不同呀?

如题所述

i++与i--在参与运算的时候值被当做i
++i与--i被当做修改后的值

如果i为整型或其他可数类型,++i与--i为引用,就是说你可以写出 ++i = 2 这种语句,但i--=2会报错。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-01-23
i=2
x=i++;=> x=2 i=3
x=++i =>x=3,i=3
x=i--;=> x=2 i=1
x=--i =>x=1,i=1
第2个回答  2011-01-24
这样的表达式的求值顺序是没有定义的。因为分号是一个顺序点,而二元加号不是一个顺序点,相邻顺序点之间的表达式的求值顺序是任意的,并且它们的副作用只在下一个顺序点之后才生成。不管是
k = (i++) + (i++) + (i++);
还是
k = (++i) + (++i) + (++i);
这里分号是一个顺序点,理论上所有++操作和赋值操作的副作用都要在分号之后才生成。但是这一点并不是强制编译器必须要等到分号结束之后才执行赋值操作,只是规定相邻两个顺序点之间的表达式求值所产生的副作用只有等到下一个顺序点结束才是确定的。而在这个顺序点结束之前,编译器对位于该个顺序点和前一个顺序点之间的表达式以任意顺序求值。就是说,你上面的这每个表达式中的三个++i(或者i++)的求值顺序是任意的,编译器想先做哪个就先做哪个。而每做一个,你都想依赖另一个的副作用。但副作用要到分毫结束才是确定的,所以这个时候编译器想怎样取舍都是可以的,不管++i还是i++它都既可以取没加1之前的值也可以取加1后的值来作为++i或者i++的值,这样每次都有不同的取舍,等到分号结束,你得到的k的值当然就可能有不同的情况了。你这两个表达式都违反了C语言有关顺序点的规定,编译器给出的值也具有一定的任意性,没有人能确切地告诉你它们的值,你只能去问编译器。不同的编译器可能会给出不同的值,就像楼上的两位得到的结果一样。如果,对上面的解释不太明白,你就应该好好参考一下顺序点的定义和作用了。总之,像i++(或者++i)这类含副作用的表达式,不要揉在一块儿,宁可多声明几个变量都好:
int r, s, t;
r = ++i;
s = ++i;
t = ++i;
k = r + s + t;

谁能详细的给我讲一下i++,++i,i--,--i的区别阿
1. i++ 是后置自增运算符,它的作用是先返回 i 的原始值,然后将 i 的值增加 1。2. ++i 是前置自增运算符,它的作用是将 i 的值增加 1,然后返回新的 i 值。3. i-- 是后置自减运算符,它的作用是先返回 i 的原始值,然后将 i 的值减少 1。4. --i 是前置自减运算符,它的作...

谁能详细的给我讲一下i++,++i,i--,--i的区别阿
1、运算符类型不同:i++使用的是后置自增运算符,++i使用的是前置自增运算符,i--使用的是后置自减运算符,--i使用的是前置自减运算符。递减操作符是“--”,意为“减少一个单位”;递增操作符是“++”,意为“增加一个单位”。2、运算规则不同:++i表示,i自增1后再参与其它运算;而i++...

++i、--i和i++、i--的区别理解
1、执行时间先后顺序不同。++i 先执行i+1后执行程序 i++ 先执行程序后执行i+1 int i=8; printf("%d\\n",++i),先执行加法所以打印出来的是9 printf("%d\\n",--i)。2、执行减法的先后程序不同。先执行减法 打印出来是8 printf("%d\\n",i++)。先执行程序 打印出来是8 打印结束后i为99...

java的 i++ ,++i ,i-- ,--i什么意思啊?
system.out.println(num);这时输出的Num=2。也就是说,i++是先赋值,后自增。而++i是先自增,后赋值。i--与i++一样。--i与++i一样。只是由加变成了减

请问一下c语言中++i跟i++,以及——i跟i--的区别啊
++i以及i++和--i以及i--之间的区别原理是一致的,搞清楚一种就能理解另一种了。说一下前缀(++i)自增和后缀(i++)自增之间的区别:以例子来说:例子1:int i = 5 ;int b = 0 ;b = ++i ;例子2:int i= 5 ;int c = 0 ;c = i++ ;两个例子中,例子1里面 b = 6 , ...

C语言中i++,++i,i--。--i是怎么运算的,有区别吗
i=1; k=1; k=++i+k; k 就等于 3 ,因为先进行自加 i++ , i 变为 2 ,然后 i 再加上等于 1 的 k ,赋给 k 得 3 ,相当于先i=i+1;再k=k+i; i=1; k=1; k=k+i++ ; k 就等于 2 ,因为先进行 k+i , k变为 2 ,然后 i 再自加等于 2 ,相当于先k=k+i;...

i++,i--,++i,--i求详解
i++是先使用i的值进行计算,然后i再加1 ++j是先将j的值加1,然后再进行计算 p=(i++)+(i++)+(i++);=5+6+7 =18 此时i=8 q=(++j)+(++j)+(++j);=6+7+8 =21 此时j=8 所以输出为18,21,8,8

单片机c51语言,i++。i--,--i,++i的区别
i++先执行,执行完后,i自加1,++i,先自加1后再执行 例如:int i=1;int a=0,b=0;a=i++;b=i;这里,a=1,b=2;如果把上面的a=i++,改成a=++i;那么 a=2,b=2 i--,--i也是这么个道理

i++,i-- 和--i++i的不同
i++是先参加运算后加1,如x=i++相当于x=i;后运行i=i+1;i--是先参加运算后减1,如x=i--相当于x=i;后运行i=i-1;++i是先加1后运算,如x=++i相当于i=i+1;后x=i;--i是先减1后运算,如x=--i相当于i=i-1;后x=i;

C语言中i++,i--.++i,--i是什么意思
i++和++i都是i进行自加1,只不过前者是先调用i再自加,后者是先自加再调用i。例如:int i=1;int o=i++;\/\/ 先将i的值附给o,i再加1 int p=++i;\/\/先将i加1,再把i的值附给p o的值是0,而p的值是3 i--和--i与上边是一样的,只不过是自减运算 ...

相似回答
大家正在搜