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

来源:百度知道 编辑:UC知道 时间:2024/09/23 17:25:23
简单的写下问题
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 ,我查查看

这题的关键是要考虑运算符的优先级和前自增,后自增的具体操作. n=2 正解

因为 = 的优先级低于 ++ ,所以先运算 ++ ,因为 ++ 为后置,所以先自增,再返回自增前的值。(More Effetive C++里有说到)

此时虽然 i 自增,但其返回之前的值,返回的值又被 “=” i , 相当于 i 并没有变化

于是:

1 :i = i++ ; // i = (i++) 而不是 i = i , (i++) = 1 ,而
i = 2 ,所以i = 1

2 :n = i++; // i自增了,但并没有对自身赋值,所以 i = 2 , n = 1

3 :i = i++; // 同1 , i对自身赋值,所以 i = 2

4 : n = i++; // 同2 ,i自增,但其返回 2 ,并被赋于 n

所以 n = 2

ps : 前自增,后自增的代码(引自More Effective C++)

// 前缀形式:增加然后取回值
UPInt& UPInt::operator++()
{
*this += 1; // 增加
return *this; // 取回值
}

// postfix form: fetch and increment
const UPInt UPInt::operator++(int)
{
UPInt oldValue = *this; // 取回值
++(*this); // 增加
return oldValue; // 返回被取回的值
}

int i=1;

int n=0;
i=i++; //把i=1赋值给i 然后i自增
n=i++; //赋值n=2 之后i=3
i=i++; //赋值i=3 之后i=4