简单的i++问题!但问过很多人却解释不清

[复制链接]
查看11 | 回复5 | 2009-2-3 15:07:37 | 显示全部楼层 |阅读模式
简单的写下问题
int i=1;
int n=0;
i=i++;
n=i++;
i=i++;
n=i++;

System.out.print(n);
请问输出多少,请高手解释为什么
一楼的大哥,如果是这么简单我就不问了
最后输出n=2
我好像发错地方了,我用的工具是MyEclipse 6.5
不好意思,浪费大家时间了我去C#区问下
谢谢wolf5x ,386370839 ,我查查看

回复

使用道具 举报

千问 | 2009-2-3 15:07:37 | 显示全部楼层
这题的关键是要考虑运算符的优先级和前自增,后自增的具体操作. n=2正解因为 = 的优先级低于 ++,所以先运算 ++ ,因为 ++为后置,所以先自增,再返回自增前的值。(More Effetive C++里有说到)此时虽然 i 自增,但其返回之前的值,返回的值又被 “=” i ,相当于 i 并没有变化于是:1 :i = i++ ; //i = (i++) 而不是i = i , (i++) = 1 ,而
i = 2 ,所以i = 12 :n = i++; // i自增了,但并没有对自身赋值,所以 i = 2 , n = 13 :i = i++;// 同1 ,...
回复

使用道具 举报

千问 | 2009-2-3 15:07:37 | 显示全部楼层
int i=1; int n=0; i=i++; (i=i;i=i+1)这里i的值为1 运算完后i=2 n=i++; (n=i;i=i+1)这里i的值为2 运算完后n=2 i=3 i=i++; (i=i;i=i+1)这里i的值为3 运算完后i=4 n=i++; (n=i;i=i+1)这里i的值为4 运算完后n=4 i=5 ...
回复

使用道具 举报

千问 | 2009-2-3 15:07:37 | 显示全部楼层
已经知道了,是编译器的区别在VC++下i=i++;i会自加在GCC下i=i++;i不自加...
回复

使用道具 举报

千问 | 2009-2-3 15:07:37 | 显示全部楼层
int i=1; int n=0;i=i++; //把i=1赋值给i 然后i自增n=i++; //赋值n=2 之后i=3i=i++; //赋值i=3 之后i=4n=i++; //把i=4赋值给n然后i自增所以输出n=4不知道对不对,你再等等答案i++就是先让i参加运算,再进行...
回复

使用道具 举报

千问 | 2009-2-3 15:07:37 | 显示全部楼层
i=i++; // (i=1)=(i=i++) 然后i=2 n=i++; // (n=2)=(n=i++) 然后i=3 i=i++; // (i=3)=(i=i++) 然后i=4 n=i++; // (n=4)=(n=i++) 然后i=5 很简单的. i++是i值参加运算后再加1 ++i是i值加1后再参加运算....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行