Параметры методов и их возвращаемое значения могут иметь тип массива, например:
public static void ShowAndChange(int[][] jagged)
{
for (int i = 0; i < jagged.Length; ++i)
{
for (int j = 0; j < jagged[i].Length; ++j)
{
Console.Write("{0} ", jagged[i][j]);
// увеличивываем значение каждого элемента на 1
jagged[i][j]++;
}
Console.Write("\n");
}
}
static void Main()
{
int[][] jagged = new[]
{
new int[] { 1, 2 },
new int[] { 1, 2, 3, 4, 5 },
new int[] { 1, 2, 3 }
};
Console.WriteLine("Первый вывод массива:");
ShowAndChange(jagged);
Console.WriteLine(new string('-', 20));
Console.WriteLine("Второй вывод массива:");
ShowAndChange(jagged);
// Delay.
Console.ReadKey();
}
Как видно из примера, метод ShowAndChange
принимает через параметр зубчатый массив и выводит значения элементов в его подмассивах, после чего увеличивает их на 1 (jagged[i][j]++;
). Также с результата работы видно, что любые изменения в массиве проведённые в методе отразились и на оригинале, это связано с тем, что все массивы являются ссылочным типом данных, и в стеке (где хранятся локальные переменные) хранится ссылка на данный массив, а не все его значения. Поэтому при передачи в метод массив происходит копирование ссылки, а не его значения.