简单的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