通过引用打电话不按预期工作

时间:2014-06-11 06:42:19

标签: c# arrays ref

在微软网站的例子中,有以下代码:

class TestRef
{
    static void FillArray(ref int[] arr)
    {
        // Create the array on demand: 
        if (arr == null)
        {
            arr = new int[10];
        }
        // Fill the array:
        arr[0] = 1111;
        arr[4] = 5555;
    }
}

如果我删除if (arr == null)行,则错误输出将为0 0 0 0 0而不是1 2 3 4 5。为什么呢?

3 个答案:

答案 0 :(得分:4)

这是因为您正在经过ref这意味着您正在main方法中更改该变量的指针。

您要将其分配给新的int[],其中填充的默认值int为0

答案 1 :(得分:0)

它的发生是因为当你把你的代码放在原来它意味着你将intArray传递给方法但是当你在这种情况下你提到删除行时,new int []被赋给变量,它将填充默认值0在你的阵列中。

此行arr = new int[10];在删除条件时分配新的int []。

如官方网站所述: -

  

作为结果,可以改变数组类型的ref参数   呼叫。例如,可以为数组分配空值或者可以   初始化为不同的数组。

答案 2 :(得分:0)

FillArray函数中,您通过引用传递数组 但是当你删除if块时 你重新初始化数组

初始化值类型数组时,元素采用值类型的默认值
在这种情况下,int具有默认值0

您需要了解传递值与传递C#中的引用 http://www.programminginterviews.info/2011/05/pass-by-value-versus-reference-in-c.html

也是值类型vs ref类型
http://www.albahari.com/valuevsreftypes.aspx