int x = 8;
x = x++;
Console.WriteLine("x={0}", x); 为什么输出的值为8?
Console.ReadKey();
int x = 8;
int y;
y = x++;
Console.WriteLine("y={0}", y);
Console.WriteLine("x={0}", x);为什么输出的值为9?
Console.ReadKey();
x = x++;
Console.WriteLine("x={0}", x); 为什么输出的值为8?
Console.ReadKey();
int x = 8;
int y;
y = x++;
Console.WriteLine("y={0}", y);
Console.WriteLine("x={0}", x);为什么输出的值为9?
Console.ReadKey();
int x = 8;
00000038 mov dword ptr [ebp-44h],8
x = x++;
0000003f mov eax,dword ptr [ebp-44h]
00000042 mov dword ptr [ebp-48h],eax
00000045 inc dword ptr [ebp-44h]
00000048 mov eax,dword ptr [ebp-48h]
0000004b mov dword ptr [ebp-44h],eax 不知你看汇编能否看出来问什么吗
x = x++;
Console.WriteLine("x={0}", x); 为什么输出的值为8?
Console.ReadKey();
——————————————————————
此处x++变成了9,之后返回的是++前的值,也就是8,这个地方是前置++和后置的区别,lz可以去百度一下,之后返回的8又赋值给了x,之后x的值当然就是8了
int x = 8;
int y;
y = x++;
Console.WriteLine("y={0}", y);
Console.WriteLine("x={0}", x);为什么输出的值为9?
Console.ReadKey();
——————————————————————
如果上面的lz看懂了,这部分就容易理解了,x++变成9,之后返回的是++之前的8赋值给y,打印的时候结果就可想而知了!
int x = 8;
x = x++;
Console.WriteLine("x={0}", x); 不要被
x = x++;这句迷惑。也可以这么理解:
x++就是x=x+1,其含义就是现将后面的x赋值给前面的x然后再加1.
++x就是x=1+x,其含义就是先对后面的x加1然后再赋值给前面的1.
但这只是在表达式中.
如果在单独的语句中二者都没有什么区别!
两个都是8,,,
初步估计,出现上面的原因可能有三个:
原因一:楼主可能是让x++,运行了两次;
原因二:下面的可能是++x,而不是x++;
原因三:楼主是在开玩笑。
回答完毕
ebp是堆栈指针寄存器。局部变量是在堆栈上分配的。并且堆栈是从低地址往高地址存。ebp指向栈顶。
ebp-44h代表x变量指针。
int x = 8就是把8放入[ebp-44h]。0000003f mov eax,dword ptr [ebp-44h] ;eax = x (eax = 8)
00000042 mov dword ptr [ebp-48h],eax ;temp = *(ebp-48h) temp = eax (temp = 8)
00000045 inc dword ptr [ebp-44h] ;x = x + 1 (x = 9)
00000048 mov eax,dword ptr [ebp-48h] ;eax = temp (eax = 8)
0000004b mov dword ptr [ebp-44h],eax ;x = eax (x = 8)
所以 x 还是 8。
i ++; //后置运算
++ i; //前置运算
后置运算先输出,后运算
前置运算先计算,后输出int i = 5;
Console.WriteLine(i++); //5
Console.WriteLine(++i); //7;
Console.WriteLine(--i); //6
Console.WriteLine(i--); //6
而是借助一个中间变量y
int x = 8;
x = x++;
----
int x = 8;
int y;
y = x++;
却让标识是从8变成9的问题,按说,等号应该优先级最低,第一种方法和第二种方法应该是一样的。
用不同的编译器编译这个,会有不同的结果。
但单独使用的时候,x的值被加1这个是肯定的
看看上面那一种解释经得起这个新的测试用例来测试。
sp1234说得对,好像想起来了,这个属于在C语言里面没有定义的,编译器可以根据需要自行优化。