【发布时间】:2017-01-07 04:42:37
【问题描述】:
在 C# 中,数组通过引用传递给函数,这意味着这段代码:
static void FillArray(int[] A) {
for (int i = 0; i < A.Length; i++) {
A[i] = -1;
}
}
static void Main(string[] args) {
int[] A = new int[10];
FillArray(A);
Console.WriteLine(string.Join(" ", A));
}
将产生-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
这是预期的答案。但是如果我像这样重新初始化数组:
static void FillArray(int[] A) {
A = new int[2*A.Length];
for (int i = 0; i < A.Length; i++) {
A[i] = -1;
}
}
输出将是0 0 0 0 0 0 0 0 0 0 !!
A 不应更改,因为它是作为对函数的引用传递的?
【问题讨论】:
-
A是一个引用对象。但是您正在按值传递该引用对象。 @JonSkeet 对此有a good article -
int[]是引用类型,但A不是通过引用传递的。它们是许多人混淆的两个不同的术语。术语“引用类型”是关于类型的。术语“按引用传递”是关于变量的。您可以通过将方法更改为FillArray(ref int[] A)来通过引用传递A。 -
是时候开始阅读一些 c# 文档了.....
标签: c# arrays pass-by-reference pass-by-value