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# 增量运算符 (++) 问题:为啥我得到错误的输出?的主要内容,如果未能解决你的问题,请参考以下文章

为啥后增量运算符返回 NaN? [关闭]

为啥 C# 编译器不调用隐式运算符。编译器错误?

为啥增量运算符不起作用? [复制]

为啥会出现分段错误/如何重载运算符?

为啥我的三元运算符会出现这些错误?

为啥 c = ++(a+b) 会出现编译错误?