关于i++和++i的问题(答案满意的追加50分)

来源:百度知道 编辑:UC知道 时间:2024/07/04 02:45:23
i=3;
j=i++*i++;
为什么j=9,i=5,而不是j=12.
*两边的i++是同时进行的吗?为什么。
但j=i++*++i或j=++i*i++
这时j=25,说明先算了++i。为什么?
答案要详细。

对于第一个,的确是12,记住i++中i的变化是在本条语句执行完后才增加的
所以这里其实就是
j=3*3=9
然后i自加两次,i=5

第二个,我觉得你的答案有问题,j应该是16
++i的确是先运算了再取它的结果的,这样就变成i=4了,就是执行
j=4*4=16
然后i自加一次,i=5

i++ 的作用是先返回i的值,再i+=1.
++i 的作用是先i+=1 然后再返回i原来的值.

所以在你的那个例子中
i=3
j=i++*i++可以分解成下列的三地址运算
a = i;
i = i + 1;
b = i;
i = i + 1;
j = a * b;
从而得到最后 j = 12 i = 5

对于i=3, j=i++*++i
a = i
i = i + 1;
i = i + 1;
b = i;
j = a * b;
所以最后j = 15;

http://zhidao.baidu.com/question/15345881.html
网上搜索 i+++i+++i++有许多类似的问题
我只提出我对这个问题的看法 ,而不是解法
对于i=3;
a1=++i;
i=3;
a2=(++i)+(++i);
i=3;
a3=(++i)+(++i)+(++i);
结果不合逻辑的是 a1=4,a2=10,a3=16;非常奇怪的16,你很难搞清楚这个16是怎么出来的,好吧,就算经过深究细算研究出这个过程,你觉得实用么?
我们设计程序的原则是用最简洁 的语言解决问题。

看到这么多回答的实在很让人失望。

有的编译器 等于12有的等于9 这