为什么输出给我的值是+1?

时间:2018-10-31 23:01:14

标签: c#

代码

public static void InitializeArray(ref double[] doubleA)
{
    //array init using foreach
    int i = 0;
    foreach (double dub in doubleA)
    {
        doubleA[i++] = i + .5;
    }
}

给我输出

doubleA[0] = 1.5 instead of .5

doubleA[1] = 2.5 instead of 1.5

以此类推

我不明白为什么要这么做。据我了解,doubleA[0]应该得到0.5,因为我只加0.5,所以多余的1从哪里来?我以为它是来自int,但对于i = 0,它不应该评估为doubleA[0] = 0 + .5吗?

到目前为止,我已经尝试编写doubleA[i++] = i + .5;来代替,它使数组中的每个元素的值仅为0.5。

2 个答案:

答案 0 :(得分:3)

所以让我们从i = 0开始吧

doubleA[i++] = i + .5;

此处您正在访问数组的位置0,但还将1添加到i的值中。当i == 0时,表达式 i++将是值0,但是变量i的值将增加,以使新值i1

在右侧,将使用i的新值(1)并将其添加到0.5中。给出值1.5,该值被分配回数组的索引0(如分配左侧所示)。

我可以继续,但我想您现在可能已经明白了...

Further reading on operator ++

答案 1 :(得分:1)

这是因为您的密钥i中的doubleA[i++]正在递增。 i++将使密钥增加一个,之后将其返回。以后使用(作为值)时,其值已经增加。所以现在您将其设置为1 + 0.5

让我们对其进行分解,并向您展示其功能等效,然后您将确切地了解正在发生的事情:

public static void InitializeArray(ref double[] doubleA)
{
    //array init using foreach
    int i = 0;
    foreach (double dub in doubleA)
    {
        int key = i;
        i = i + 1;
        doubleA[key] = i + .5;
    }
}