Учебно-методический комплекс общее количество часов 58 ч. Лекции 28 ч


Передача массива, в качестве параметра


Download 2.46 Mb.
bet35/91
Sana19.10.2023
Hajmi2.46 Mb.
#1709453
TuriУчебно-методический комплекс
1   ...   31   32   33   34   35   36   37   38   ...   91
Bog'liq
Язык программирования C#

7.5. Передача массива, в качестве параметра

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


static void Fill(double[][] Matrix)


{
for (int i = 0; i < Matrix.Length; i++)
for (int j = 0; j < Matrix[i].Length; j++)
Matrix[i][j] = i * 10 + j + 1;
}

static void Output(double[][] Matrix)


{
for (int i = 0; i < Matrix.Length; i++)
{
for (int j = 0; j < Matrix[i].Length; j++)
Console.Write(Matrix[i][j] + "\t");
Console.WriteLine();
}
}

static void Main(string[] args)


{
double[][] Matrix;

Matrix = new double[10][];


for (int i = 0; i < Matrix.Length; i++)
Matrix[i] = new double[10];

Fill(Matrix);


Output(Matrix);


}
Лист. 7.20

В этом листинге выделяется память под рваный массив вещественных чисел, за тем этот массив передается в метод Fill(), в котором заполняется, и в метод Output(), который его выводит на консоль.


Вывод примера имеет табличный вид, вот первая и последняя строки этой таблицы:

0 1 2 3 4 5 6 7 8 9


9 10 11 12 13 14 15 16 17 18


Вывод. 7.7

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


Для решения этой проблемы массив можно передавать по ссылке, использую ключевые слова ref и out. Тогда методу будет передаваться ссылка на ссылку на массив.

static void CreateFill(out double[][] Matrix)


{
Matrix = new double[10][];
for (int i = 0; i < Matrix.Length; i++)
{
Matrix[i] = new double[10];
for (int j = 0; j < Matrix[i].Length; j++)
Matrix[i][j] = i * 10 + j + 1;
}
}

static void Output(double[][] Matrix)


{
for (int i = 0; i < Matrix.Length; i++)
{
for (int j = 0; j < Matrix[i].Length; j++)
Console.Write(Matrix[i][j] + "\t");
Console.WriteLine();
}
}

static void Main(string[] args)


{
double[][] Matrix;

CreateFill(out Matrix);


Output(Matrix);


}
Лист. 7.21

В этом листинге мы переделали пример так, чтобы матрица не только заполнялась в методе, но создавалась там, для этого мы воспользовались ключевым словом out.


Существует возможность передавать в функцию массивы, создавая их прямо в момент передачи.


static void Output(int[] Arr)


{
for (int i = 0; i < Arr.Length; i++)
Console.Write (Arr[i] + " ");
}

static void Main(string[] args)


{
Output(new int[] { 1, 2, 3, 4, 5 });
}
Лист. 7.22

В этом примере метод Output ожидает массив целых чисел и при его вызове этот массив создается.


Программа выводит следующую строку:
1 2 3 4 5
Вывод. 7.8

Самым простым методом передачи массивов функции является ключевое слово params, оно ставится только перед последним передаваемым в функцию массивом. При использовании этого слова у вызывающего метода создается впечатление, что метод принимает неограниченное число параметров и элементы массива передаются просто как параметры, разделенные запятой.


static void Output(params int[] Arr)


{
for (int i = 0; i < Arr.Length; i++)
Console.Write(Arr[i] + " ");
}

static void Main(string[] args)


{
Output(1, 2, 3, 4, 5);
}
Лист. 7.23

Вот так мы переделали предыдущий пример, используя ключевое слово params.


Вывод остался прежним.



Download 2.46 Mb.

Do'stlaringiz bilan baham:
1   ...   31   32   33   34   35   36   37   38   ...   91




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling