2010-11-26 117 views
4

我有一个简单的c#控制台应用程序,但我得到错误的输出为什么?C#递增运算符(++)问题:为什么我输出错误?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication11 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     int i = 100; 
     for (int n = 0; n < 100; n++) 
     { 
      i = i++; 
     } 
     Console.WriteLine(i); 
    } 

} 
} 
+3

预期产量是多少? – Fredou 2010-11-26 18:49:27

+0

我猜输出将是200. – 2010-11-26 18:53:29

回答

7

i++是一个表达式,它返回i,然后递增它。

因此,i = i++将评估i,增加i,然后分配i原来值,它是增加了。

您需要使用++i,它将返回递增的值。

5
i = i++; 

将i为i的旧值,然后递增它。我想你想:

i++; 

或者更好的是,如果你的编译器是瘸子,没有优化的回报:

++i; 

干杯。

4

i = i++;向变量i写入两次。后增量首先被执行,但是然后赋值语句覆盖它。

尽量只i++;

3

只要使用我++,没有I = I + +。

1

我猜你以为你会得到的是,我会增加每个循环,但你编码它的方式是,你分配我的价值自我和++操作发生'后',所以我的价值似乎并没有增加。 检查What is the difference between ++i and i++?

7

我猜你真的想要一个解释,为什么它不能按预期工作,而不是实际得到的结果,因为你可以通过在第一时间设置i等于200 。

在创建变量的临时副本后应用后增量操作符。临时用于然后执行分配在声明中操作,这样你的循环相当于:

for (int n = 0; n < 100; n++) 
    { 
     j = i; 
     i++; 
     i = j; 
    } 

既然是这样的话,增量基本上是丢弃,i不会真正增加。