在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在這個 – Jonesopolis
上有一個很好的文章(http://jonskeet.uk/csharp/parameters.html)'int []'是一個引用類型,但'A'不是通過引用傳遞的。他們是兩個不同的術語,許多人混在一起。術語「引用類型」是關於類型的。術語「傳遞參考」是關於變量的。您可以通過將方法更改爲:'FillArray(ref int [] A)''來引用'A'。 –
開始閱讀一些c#文檔的好時機..... – Eser