Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теоретический_курс.doc
Скачиваний:
36
Добавлен:
10.11.2019
Размер:
7.68 Mб
Скачать

2. Передача одномерных массивов в качестве аргументов

Массивы можно передавать в качестве аргументов для параметров методов. Поскольку массивы являются ссылочными типами, метод может изменять значение элементов.

Инициализированный одномерный массив можно передать в метод. Например, следующая инструкция передает массив в метод Print:

int[] theArray = { 1, 3, 5, 7, 9 };

PrintArray(theArray);

В следующем примере кода показана частичная реализация метода Print:

void PrintArray(int[] arr)

{

// Код метода

}

Инициализацию и передачу нового массива можно выполнить в рамках одного шага, как показано в следующем примере:

PrintArray(new int[] { 1, 3, 5, 7, 9 });

3. Массивы типов значений и ссылочных типов

Рассмотрим код:

SomeType[] array4 = new SomeType[10];

Результат этого оператора зависит от того, является ли SomeType типом значения или ссылочным типом. Если это тип значения, оператор создаёт массив из 10 элементов типа SomeType. Если SomeType — ссылочный тип, оператор создаёт массив из 10 элементов, каждый из которых инициализируется нулевой ссылкой.

4. Многомерный массив

Массивы могут иметь несколько измерений. Например, следующее объявление создаёт двумерный массив из четырех строк и двух столбцов:

int[,] array = new int[4, 2];

Следующее объявление создает трехмерный массив с количеством элементов 4, 2 и 3:

int[, ,] array1 = new int[4, 2, 3];

Массив можно инициализировать при объявлении, как показано в следующем примере:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace LC_Console

{

class Program

{

static void Main()

{

int[,] array2D = new int[,] { { 4, 8 }, { 15, 16 }, { 23, 42 }, { 7, 8 } }; // Два элемента (матрица 4 на 2)

int[,] array2Da = new int[4, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // Явно указанное число элементов (матрица 4 на 2)

string[,] array2Db = new string[3, 2] { { "один", "два" }, { "три", "четыре" }, { "пять", "шесть" } }; // Строковые элементы

int[, ,] array3D = new int[,,] { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } } }; // Многомерный массив (матрица 2 на (2 на 3))

int[, ,] array3Da = new int[2, 2, 3] { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } } }; // Явно указанное число элементов (матрица 2 на (2 на 3))

// Выводим элементы масивов

Console.WriteLine(array2D[0, 0]);

Console.WriteLine(array2D[0, 1]);

Console.WriteLine(array2D[1, 0]);

Console.WriteLine(array2D[1, 1]);

Console.WriteLine(array2D[3, 0]);

Console.WriteLine(array2Db[1, 0]);

Console.WriteLine(array3Da[1, 0, 1]);

Console.WriteLine(array3D[1, 1, 2]);

Console.WriteLine("\nДля продолжения нажмите любую клавишу . . .");

Console.ReadKey();

}

}

}

/* Выведет:

* 4

* 2

* 3

* 4

* 7

* три

* 8

* 12

* Для продолжение нажмите любую клавишу . . .

*/

Можно также инициализировать массив, не указывая его размерность:

int[,] array4 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };

Если нужно создать переменную массива без инициализации, то необходимо использовать оператор new, чтобы присвоить массив переменной. В следующем примере показано использование new:

int[,] array5;

array5 = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // OK

//array5 = {{1,2}, {3,4}, {5,6}, {7,8}}; // Ошибка!

Следующий пример присваивает значение конкретному элементу массива:

array5[2, 1] = 25;

Аналогичным образом, в следующем примере получено значение конкретного элемента массива и оно назначено переменной elementValue:

int elementValue = array5[2, 1];

В следующем примере кода элементы массивов инициализируются значениями по умолчанию (за исключением массивов массивов):

int[,] array6 = new int[10, 10];

Рассмотрим ещё один пример многомерных массивов:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace LC_Console

{

class Program

{

static void Main(string[] args)

{

// Объявляем двумерный массив

int[,] myArr = new int[4, 5];

Random ran = new Random();

// Инициализируем данный массив

for (int i = 0; i < 4; i++)

{

for (int j = 0; j < 5; j++)

{

myArr[i, j] = ran.Next(1, 15);

Console.Write("{0}\t", myArr[i, j]);

}

Console.WriteLine();

}

Console.WriteLine("Для продолжения нажмите любую клавишу . . .");

Console.ReadKey();

}

}

}

/* Выведет:

* 13 10 3 7 11

* 7 12 11 11 8

* 13 6 12 13 2

* 13 5 11 6 2

* Для продолжения нажмите любую клавишу . . .

*/

Обратим особое внимание на способ объявления двумерного массива. Схематическое представление массива myArr показано ниже:

Рис. 4. 1. Доступ к элементу массива myArr[2,3]

Если читателю учебного курса уже приходилось раньше программировать на С, С++ или Java, то будьте особенно внимательны, объявляя или организуя доступ к многомерным массивам в С#. В этих языках программирования размеры массива и индексы указываются в отдельных квадратных скобках, тогда как в С# они разделяются запятой.