static void SetValue(int[] arrInt)
{
for (int i = 0; i < arrInt.Length; i++ )
{
arrInt[i] = -1;
}
}
这一过程虽然也是值传递,传进来的是数组的地址,
所以参数arrInt实际保存的是数组地址的一个副本
然后在赋值的时候arrInt[i] = -1;实际是对数组的元素进行了赋值,
虽然过程执行完毕后,参数arrInt(实际保存的是数组地址的一个副本)被回收,
但是数组的元素已被修改。然而:
static void Swap(int[] i,int[] j)
{
int[] intTemp = i;
i = j;
j = intTemp;
}
参数i,j保存的数组地址的副本,然后互换赋值,过程执行完毕,内存被回收,
并没有改变数组元素的值。除非改数组元素的值如 i[0]=j[0]
{
for (int i = 0; i < arrInt.Length; i++ )
{
arrInt[i] = -1;
}
}
这一过程虽然也是值传递,传进来的是数组的地址,
所以参数arrInt实际保存的是数组地址的一个副本
然后在赋值的时候arrInt[i] = -1;实际是对数组的元素进行了赋值,
虽然过程执行完毕后,参数arrInt(实际保存的是数组地址的一个副本)被回收,
但是数组的元素已被修改。然而:
static void Swap(int[] i,int[] j)
{
int[] intTemp = i;
i = j;
j = intTemp;
}
参数i,j保存的数组地址的副本,然后互换赋值,过程执行完毕,内存被回收,
并没有改变数组元素的值。除非改数组元素的值如 i[0]=j[0]
static void Swap(ref int[] i, ref int[] j)
{
int[] intTemp = i;
i = j;
j = intTemp;
}
也就是用引用方式传递参数
第个组代码之所以可以改变数组中元素的值是因为改变的是参数指向的内存,而不是
参数本身,如果写成 arrInt = new int[2] ; 一样是无法改变该参赛
static void SetValue(int[] arrInt)
{
arrInt[0] = -1;
}static void SetValue(ref int[] arrInt)
{
arrInt[0] = -1;
}