C#增量运算符(++)问题:为什么输出错误?


C# Increment operator (++) question:Why am i getting wrong output?

我有一个简单的C控制台应用程序,但是我得到了错误的输出为什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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);
    }

}
}


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

在创建变量的临时副本之后,将应用PostIncrement运算符。临时语句用于语句中的操作,然后执行赋值,因此循环等效于:

1
2
3
4
5
6
    for (int n = 0; n < 100; n++)
    {
        j = i;
        i++;
        i = j;
    }

既然是这样,增量基本上是被丢弃的,而i从未实际增加。


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

因此,i = i++将对i进行评估,增加i,然后将i分配给原值,再进行递增。

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


1
i = i++;

这会将i设置为i的旧值,然后将其递增。我想你想要:

1
i++;

或者更好的是,如果您的编译器是跛脚的,并且没有优化返回:

1
++i;

干杯。


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

试一试i++;


只需使用i++,而不是i=i++。


我猜你认为你会得到的是,我将在每个循环中递增,但是你对它进行编码的方式是,你将i的值赋给它自己,然后,++操作会"事后"发生,所以i的值似乎不会递增。检查++i和i++之间的区别是什么?