C# 增量运算符 (++) 问题:为啥我得到错误的输出?
Posted
技术标签:
【中文标题】C# 增量运算符 (++) 问题:为啥我得到错误的输出?【英文标题】:C# Increment operator (++) question:Why am i getting wrong output?C# 增量运算符 (++) 问题:为什么我得到错误的输出? 【发布时间】:2011-05-16 07:53:07 【问题描述】:我有一个简单的 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);
【问题讨论】:
关于 Java 中相同结构的老问题:***.com/questions/3831341/… Post-increment Operator Overloading的可能重复 【参考方案1】:i++
是一个表达式,它返回i
,然后将其递增。
因此,i = i++
将评估i
,增加i
,然后在增加之前将i
分配给原始 值。
您需要使用++i
,它将返回递增的值。
【讨论】:
【参考方案2】:我猜你真的想解释为什么它不能按预期工作,而不是真正得到结果,因为你可以通过首先将 i
设置为 200 来得到结果。
在创建变量的临时副本后应用后增量运算符。临时用于语句中的操作,然后执行分配,因此您的循环相当于:
for (int n = 0; n < 100; n++)
j = i;
i++;
i = j;
既然如此,增量基本上被丢弃了,i
从未真正增加过。
【讨论】:
【参考方案3】:i = i++;
这会将 i 设置为 i 的旧值,然后将其递增。我想你想要:
i++;
如果你的编译器很糟糕并且没有优化返回,那就更好了:
++i;
干杯。
【讨论】:
或者,更好的是i += 2
。在 C/++ 中,i = i++;
是明确未定义的。【参考方案4】:
i = i++;
行两次写入变量 i。后自增先执行,然后赋值语句将其覆盖。
试试i++;
【讨论】:
【参考方案5】:只使用 i++,而不是 i = i++。
【讨论】:
以上是关于C# 增量运算符 (++) 问题:为啥我得到错误的输出?的主要内容,如果未能解决你的问题,请参考以下文章