x = x++ 的理解?。
如题
同样是 x=x++
在C++下的结果与C#下是不同的
如x = 1
C#下 x = x++ 后 x 仍然是1
C++下 x = x++ 后 x 是2
class Program
{
static void Main(string[] args)
{
int x = 0;
for(int i=0; i<5; i++) {
x =x++;
}
Console.WriteLine(x);
Console.Read();
}
}
我好奇的是,“x=x++” 应该是x++先取x的值再计算+1,但是为什么赋值之后x并没有自增1.
------解决方案--------------------
不会有人承诺在不同语言下,同一个语句的结果是相同的。
就好像说同一个词汇在不同的语言下会有不同的意义。别指望世界大同,那不现实。
------解决方案--------------------这个应该取决于运算符的优先级。
你试试 x=(x++);
------解决方案--------------------C#,你这里是给x本身赋值,所以它并不会增加,如果你是int x = 1; int y = x++; 那么就符合你期望的结果了。
------解决方案--------------------很明显,x=x++,每次都是先用后加,但是均覆盖,并没有保存前一次的结果。你可以换成x=++x;//先加后附来得到5这个你想要的结果。
------解决方案--------------------i++的结果是1,但是i的值是2,你用
i=i++;
那i就还是1。
如果不赋值直接用
i++;
那i就是2了
------解决方案--------------------突然想起来一个
int i = 1;
int j = i + i++;
Console.WriteLine(j);
Console.Read();
这个结果是2,而不是3。
------解决方案--------------------不一样就不一样拜 也只有经常被打的面试官 才出这种问题
------解决方案--------------------在每个开发语言中即使相同的语句,但是结果不一定相同的,再说了LZ为何要纠结于此?
------解决方案--------------------x++返回x的当前值并使变量x自增1,这个自增的操作在返回x的值之前已经完成了
也就是说,如果x为1,那么这个表达式运算结果为1,并且在表达式运算完成时x为2
x=x++;这个语句按照优先级先计算x++,表达式结果为1,运算完成时x等于2,之后执行赋值x=1,故最后运算结果为x为1而不是2
另外,在C++中这是未定义行为,具体结果取决于编译器,不一定会是2的,请LZ注意
------解决方案--------------------你循环一下,然后监视X的值 就懂了