C#增量运算符(+;+;)问题:为什么我得到错误的输出?
我有一个简单的c#控制台应用程序,但我得到了错误的输出为什么C#增量运算符(+;+;)问题:为什么我得到错误的输出?,c#,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 =
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);
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
命名空间控制台应用程序11
{
班级计划
{
静态void Main(字符串[]参数)
{
int i=100;
对于(int n=0;n<100;n++)
{
i=i++;
}
控制台写入线(i);
}
}
}
这将i设置为i的旧值,然后将其递增。我想你想要:
i++;
如果您的编译器很蹩脚并且没有优化返回,则更好:
++i;
干杯。
i++
是一个表达式,返回i
,然后递增
因此,i=i++
将计算i
,递增i
,然后在递增之前将i
赋值给原始值
您需要使用
++i
,它将返回递增的值。行i=i++代码>向变量i写入两次。先执行post增量,但赋值语句会覆盖它
试试i++代码>只需使用i++,而不是i=i++。我猜您确实想要解释为什么它不能按预期工作,而不是实际得到结果,因为您可以通过将i
设置为等于200来获得结果
在创建变量的临时副本后应用postincrement运算符。临时语句用于语句中的操作,然后执行赋值,因此循环相当于:
for (int n = 0; n < 100; n++)
{
j = i;
i++;
i = j;
}
for(int n=0;n<100;n++)
{
j=i;
i++;
i=j;
}
既然如此,增量基本上被丢弃,而i
实际上从未增加过。关于Java中相同构造的老问题:可能是重复的,或者更好的是,i+=2
。在C/++,i=i++代码>是显式未定义的。
for (int n = 0; n < 100; n++)
{
j = i;
i++;
i = j;
}