【问题标题】:How does increment operator work with arrays?增量运算符如何处理数组?
【发布时间】:2023-03-09 14:54:01
【问题描述】:

这是让我困惑的代码:

var array = new int[5];
array[0] = 1;
array[0]++;
Console.WriteLine(array[0]);  //'2' is printed

我不明白为什么数组的项目会增加。据我了解,应该会发生以下情况:

第一行:我创建了一个容量为 5 个整数的数组。

第 2 行:我将 '1' 放入该数组的 0 索引

第 3 行:我从索引 0 检索项目并将其递增 1

第 4 行:我打印索引 0 处的项目

第三行是这里的关键。我不明白数字“2”是如何写入数组的。我只是在阅读项目并增加它。

【问题讨论】:

  • I don't understand how number '2' got written into the array.期待的结果是什么?

标签: c# arrays .net operators increment


【解决方案1】:

array[0]++;(大致)相当于array[0] += 1;

所以该值被写回数组位置。

这是一个副作用,需要注意一个顺序问题:

int y = array[0]++;       // now y == 1 and array[0] == 2

int y = (array[0] += 1);  // now y == 2 and array[0] == 2

【讨论】:

  • array[0] += 1; 部分让我很清楚。谢谢
【解决方案2】:

在 C# 中,递增和递减运算符操作:

  • 变量
  • 财产访问
  • 索引器访问(您的情况)

生成的代码还知道将值存储回何处。

如果运算符只增加一个值,即使myVariable++ 也不会做任何事情。

更多信息请参见Arithmetic Operators

【讨论】:

    【解决方案3】:

    这里是如何工作的:

    array[0]++;
    

    首先,评估“array[0]”。

    其次,对“array[0]”保存的值进行递增。

    例如,如果你写:

    if (array[0]++ == 2) DoSomething();
    

    首先,评估条件 (array[0] == 2)。

    其次,数组[0]递增。

    第三,执行下一条指令。

    但是如果你写:

    if (++array[0] == 2) DoSomething();
    

    首先,数组[0] 递增。

    其次,评估条件 (array[0] == 2)。

    第三,执行下一条指令。

    如果你在一条指令中只写一个增量:

    ++x;
    

    或者

    x++;
    

    它做同样的事情。

    【讨论】:

      猜你喜欢
      • 2016-03-18
      • 2013-10-08
      • 2020-04-15
      • 2020-01-10
      • 2015-08-10
      • 2021-10-08
      • 1970-01-01
      • 2015-09-25
      • 2013-10-20
      相关资源
      最近更新 更多