关于按值传参和按引用传参,大家分析一个这两段代码的内存分配过程。
class Class1
{
static void Main(string[] args)
{
int[] i = new int[3]{1,2,3};
int[] j = new int[4]{-1,-2,-3,0};
Swap(i,j);
//输出i的第一个元素=1,j的第一个元素=-1
Console.WriteLine("i的第一个元素={0},j的第一个元素={1}",i[0],j[0]);
Console.ReadLine();
}
//交换值
static void Swap(int[] i,int[] j)
{
int[] intTemp = i;
i = j;
j = intTemp;
}
}
似乎,如果是从按值传参的角度来分析,因为方法内部的修改不会改变实参的值,这样的解释对此结果是正确的。
但以下代码:
class Class1
{
static void Main(string[] args)
{
int[] arrInt = new int[3];
SetValue(arrInt);
//输出i的第一个元素=-1
Console.WriteLine("arrInt的第一个元素={0}",arrInt[0]);
Console.ReadLine();
}
static void SetValue(int[] arrInt)
{
for (int i = 0; i < arrInt.Length; i++ )
{
arrInt[i] = -1;
}
}
}
在这段代码中,同样还是数组(引用类型的变量),同样是按值传参(没有用ref关键字修饰),又该如何解释?
望有人分析一下两段代码的内存分配。