Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#数组参数参考_C#_Arrays - Fatal编程技术网

C#数组参数参考

C#数组参数参考,c#,arrays,C#,Arrays,我有一个C#代码如下: int[] A = new int[] {1, 2, 3}; fun(A); // A at this point still says 1, 2, 3. void fun(int[] A) { int[] B = new int[] {4, 5, 6}; A = B; } 我以为所有数组都是通过C#中的引用传递的。调用fun() 我认为所有数组在C中都是通过引用传递的# 实际上(原始数组对象的引用是通过值传递的,),这是C#中引用类型的常见行为 您的理解

我有一个C#代码如下:

int[] A = new int[] {1, 2, 3};
fun(A);
// A at this point still says 1, 2, 3.

void fun(int[] A)
{
   int[] B = new int[] {4, 5, 6};
   A = B;
}
我以为所有数组都是通过C#中的引用传递的。调用
fun()

我认为所有数组在C中都是通过引用传递的#


实际上(原始数组对象的引用是通过值传递的,),这是C#中引用类型的常见行为

您的理解部分正确,引用是通过值传递的,这意味着将创建一个指向原始数组对象
a
的新引用

fun(int[]A)
有自己的引用副本,该副本指向包含1,2,3的数组对象,在
fun
中,您创建了一个新的数组对象
B
,您只需将新对象的引用分配给您的局部方法引用变量,这当然不会对原始对象产生任何影响
作为输入传递给
fun
的对象

如果要将
fun
中对
A
所做的更改反映回原始数组对象,则需要通过引用传递它

您可以在不通过引用传递的情况下更新数组项,这在中有很好的解释

希望有帮助

我认为所有数组在C中都是通过引用传递的#


实际上(原始数组对象的引用是通过值传递的,),这是C#中引用类型的常见行为

您的理解部分正确,引用是通过值传递的,这意味着将创建一个指向原始数组对象
a
的新引用

fun(int[]A)
有自己的引用副本,该副本指向包含1,2,3的数组对象,在
fun
中,您创建了一个新的数组对象
B
,您只需将新对象的引用分配给您的局部方法引用变量,这当然不会对原始对象产生任何影响
作为输入传递给
fun
的对象

如果要将
fun
中对
A
所做的更改反映回原始数组对象,则需要通过引用传递它

您可以在不通过引用传递的情况下更新数组项,这在中有很好的解释


希望有帮助

数组通过a引用传递,您可以通过执行
a[0]=7来看到这一点来自另一个方法内部

但是,该引用(由外部变量
A
)通过值传递给函数。复制引用并创建新变量并将其传递给函数。函数外部的变量不受函数内部参数变量
A
重新分配的影响

int[] A = new int[] {1, 2, 3};
fun2(A);
// A at this point says 7, 2, 3.
fun(ref A);
// A at this point says 4, 5, 6.

void fun2(int[] a)
{
   a[0] = 7;
}

void fun(ref int[] a)
{
   int[] B = new int[] {4, 5, 6};
   a = B;
}
要更新原始变量,需要使用
ref
关键字,以便函数内部的参数表示与函数外部相同的对象

int[] A = new int[] {1, 2, 3};
fun2(A);
// A at this point says 7, 2, 3.
fun(ref A);
// A at this point says 4, 5, 6.

void fun2(int[] a)
{
   a[0] = 7;
}

void fun(ref int[] a)
{
   int[] B = new int[] {4, 5, 6};
   a = B;
}

数组通过a引用传递,您可以通过执行
a[0]=7来看到这一点来自另一个方法内部

但是,该引用(由外部变量
A
)通过值传递给函数。复制引用并创建新变量并将其传递给函数。函数外部的变量不受函数内部参数变量
A
重新分配的影响

int[] A = new int[] {1, 2, 3};
fun2(A);
// A at this point says 7, 2, 3.
fun(ref A);
// A at this point says 4, 5, 6.

void fun2(int[] a)
{
   a[0] = 7;
}

void fun(ref int[] a)
{
   int[] B = new int[] {4, 5, 6};
   a = B;
}
要更新原始变量,需要使用
ref
关键字,以便函数内部的参数表示与函数外部相同的对象

int[] A = new int[] {1, 2, 3};
fun2(A);
// A at this point says 7, 2, 3.
fun(ref A);
// A at this point says 4, 5, 6.

void fun2(int[] a)
{
   a[0] = 7;
}

void fun(ref int[] a)
{
   int[] B = new int[] {4, 5, 6};
   a = B;
}


您必须修改对A的原始引用,您永远不会这样做。请参见,数组的元素是通过引用传递的,而不是数组本身。请参阅:在制作示例时,不应在多个位置使用相同的名称,这会使您的示例很难讨论,传递给函数的参数名称和变量名称应该是两个不同的名称,以使示例更易于讨论。@ArchieGertsman不,元素不是通过引用传递的。只传递一个变量,它是通过值传递的,但该值是一个引用。数组值被引用,但它们根本不是通过引用或其他方式“传递”的。@请注意我的错误。但是这个链接仍然有效。你必须修改对A的原始引用,你永远不会这样做。请参见,数组的元素是通过引用传递的,而不是数组本身。请参阅:在制作示例时,不应在多个位置使用相同的名称,这会使您的示例很难讨论,传递给函数的参数名称和变量名称应该是两个不同的名称,以使示例更易于讨论。@ArchieGertsman不,元素不是通过引用传递的。只传递一个变量,它是通过值传递的,但该值是一个引用。数组值被引用,但它们根本不是通过引用或其他方式“传递”的。@请注意我的错误。但是这个链接仍然有效。
数组是通过引用传递的
不,它是通过值传递的,从OP的代码中可以看出。如果那句话是真的,那么OP的代码会做他们期望它做的事情,而不是它实际做的事情。@Servy做了一些改写现在这句话没有意义了。你的意思是说传递的数组是引用,而不是引用?
数组是通过引用传递的
否,它是通过值传递的,从OP的代码中可以看出。如果那句话是真的,那么OP的代码会做他们期望它做的事情,而不是它实际做的事情。@Servy做了一些改写现在这句话没有意义了。你的意思是说传递的数组是引用,而不是引用?所以你说数组是通过引用传递的,