Урок 9. Массив как параметр\возвращаемое значение метода

Параметры методов и их возвращаемое значения могут иметь тип массива, например:

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();
}

16

Как видно из примера, метод ShowAndChange принимает через параметр зубчатый массив и выводит значения элементов в его подмассивах, после чего увеличивает их на 1 (jagged[i][j]++;). Также с результата работы видно, что любые изменения в массиве проведённые в методе отразились и на оригинале, это связано с тем, что все массивы являются ссылочным типом данных, и в стеке (где хранятся локальные переменные) хранится ссылка на данный массив, а не все его значения. Поэтому при передачи в метод массив происходит копирование ссылки, а не его значения.

%D1%81%D1%82%D1%80%D0%B5%D0%BB%D0%BA%D0%B0%20%D0%B2%D0%BB%D0%B5%D0%B2%D0%BE%202 предыдущая статья | следующая статья %D1%81%D1%82%D1%80%D0%B5%D0%BB%D0%BA%D0%B0%20%D0%B2%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%202