В 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 имеет [хорошую статью] (http://jonskeet.uk/csharp/parameters.html) на этом – Jonesopolis
'int []' является ссылочным типом, но 'A' не передается по ссылке. Это два разных термина, которые смешивают многие люди. Термин «ссылочный тип» относится к типам. Термин «pass-by-reference» относится к переменным. Вы можете передать 'A' по ссылке, изменив метод на:' FillArray (ref int [] A) '. –
Хорошее время, чтобы начать читать некоторые документы C# ..... – Eser