Учебно-методический комплекс общее количество часов 58 ч. Лекции 28 ч
Передача массива, в качестве параметра
Download 2.46 Mb.
|
Язык программирования 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: |
ma'muriyatiga murojaat qiling