当i = 3时。y = (i++)+(i++)+(i++)
x =?y =?y = (++i)+(++i)+(++i)x =?y =?其中的过程是什么?
++i是马上把i+1然后用于计算
i++是吧i用于计算,然后才把i加1
当i = 3时。y = (i++)+(i++)+(i++)
一、
y =(i++ 才这里i还是为3) + (到了这里i已经加了1所以i为4了)(i++) + (i++)
二、
y = (3) + (4 ,因为++在i的后面,所以这里还是i=4) + (到了这里i又已经加了1所以i为5了)(i++)
三、
y = (3) + (4) + (5,因为++在i的后面,所以这里i还是为5)
四、
y = (3) + (4) + (5) = 12 这时i会加1所以i为6
http://www.guokr.com/blog/471312/
http://blog.jobbole.com/53211/
类似于a+=a++;或者(i++)+(i++)+(i++)属于未定义行为,并不是说c语言中还未定义这种行为,它早有定论,它的结果取决于编译器实现,不要写这样的代码!
1、++i
可以看成是 i= i+ 1;return i;即返回i值。
2、i++
可以看成是temp = i;i = i+ 1; return temp;即返回temp值;
所以当需要返回值时,两者是有区别的,一个是返回自加后的值,一个是返回自加前的值,
不需要返回值时,也是有区别的,从上面可以看出,第一个的代码效率更高点。
i++先引用再自加,++i先自加再引用
比如i=3,
y=i++;先引用y=3,再自加i=4
y=++i;先自加i=4,再引用y=4
前面的:
i = i + 1 ;
.....
后面的:
...
...
i = i + 1;