1_Массивы в C#. Массивы в C# Массив набор элементов одного и того же типа, объединенных общим именем. Массивы в С# можно использовать по аналогии с тем, как они используются в других языках программирования, например, в C или Pascal.
Скачать 0.99 Mb.
|
МАССИВЫ в C# Массив — набор элементов одного и того же типа, объединенных общим именем. Массивы в С# можно использовать по аналогии с тем, как они используются в других языках программирования, например, в C++ или Pascal. Однако С#-массивы имеют существенные отличия. Во-первых, они относятся к ссылочным типам данных. При этом имя массива является ссылкой на область кучи (динамической памяти), в которой последовательно размещается набор элементов определенного типа. Выделение памяти под элементы происходит на этапе объявления или инициализации массива, а за освобождением памяти следит сборщик мусора. Во-вторых, массивы реализуются в С# как объекты, для которых разработан большой набор методов, реализующих различные алгоритмы обработки элементов массива. Рассмотрим следующие типы массивов: одномерные, многомерные и ступенчатые (разрывные). Одномерные массивы Одномерный массив – это фиксированное количество элементов одного и того же типа, объединенных общим именем, где каждый элемент имеет свой номер. Нумерация элементов массива в С# начинается с нуля, то есть, если массив состоит из 10 элементов, то они будут иметь следующие номера: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Одномерный массив в С# реализуется как объект, поэтому его создание представляет собой двухступенчатый процесс. Сначала объявляется ссылочная переменная типа массив, затем выделяется память под требуемое количество элементов базового типа, и ссылочной переменной присваивается адрес нулевого элемента в массиве. Базовый тип определяет тип данных каждого элемента массива. Количество элементов, которые будут храниться в массиве, определяется размером массива. При необходимости, этапы объявления переменной типа массив, и выделения необходимого объема памяти могут быть объединены в один. Кроме того, на этапе объявления массива можно произвести его инициализацию. Поэтому, для объявления одномерного массива может использоваться одна из следующих форм записи: 1) базовый_тип [] имя_массива; Например: char [] a; Объявлена ссылка на одномерный массив символов (имя ссылки а), которая в дальнейшем может быть использована для: адресации на уже существующий массив; передачи массива в метод в качестве параметра; отсроченного выделения памяти под элементы массива. 2) базовый_тип [] имя_массива = new базовый_тип [размер]; Например: int [] b=new int [10]; Объявлена ссылка b на одномерный массив целых чисел. Выделена память для 10 элементов целого типа, адрес этой области памяти записан в ссылочную переменную b. Элементы массива инициализируются по умолчанию нулями. Замечание. Надо отметить, что в C# элементам массива присваиваются начальные значения по умолчанию в зависимости от базового типа. Для арифметических типов – нули, для ссылочных типов – null, для символов - символ с кодом ноль. 3) базовый_тип [] имя_массива={список инициализации}; Например: double [] c={0.3, 1.2, -1.2, 31.5}; Объявлена ссылка c на одномерный массив вещественных чисел. Выделена память под одномерный массив, размерность которого соответствует количеству элементов в списке инициализации - четырем. Адрес этой области памяти записан в ссылочную переменную с. Значение элементов массива соответствует списку инициализации. Обращение к элементу массива происходит с помощью индекса: указывается имя массива и, в квадратных скобках, номер данного элемента. Например, a[0], b[8], c[i]. Так как массив представляет собой набор элементов, объединенных общим именем, то обработка массива обычно производится в цикле. Рассмотрим несколько основных примеров работы с одномерными массивами. Вывод массива на экран Задание. Измените программу так, чтобы элементы массива выводились в строчку через пробел. Для вывода одномерного массива на экран очень удобно использовать оператор foreach. Оператор foreach применяется для перебора элементов в специальном образом организованной группе данных, в том числе, и в массиве. Удобство этого вида цикла заключается в том, что нам не требуется определять количество элементов в группе и выполнять перебор по индексу – мы просто указываем элементы какой группы необходимо перебрать. Синтаксис оператора: foreach (<тип><имя>in<группа>) <тело цикла>; где имя определяет локальную по отношению к циклу переменную, которая будет по очереди перебирать все значения из указанной группы; ее тип соответствует базовому типу элементов группы. Ограничением оператора foreach является то, что с его помощью можно только просматривать значения элементов в группе данных. Никаких изменений ни с самой группой, ни с находящимися в ней данными проводить нельзя. В нашем случае осуществить вывод массива на экран можно следующим образом: Ввод элементов массива Заполнение массива случайными элементами Заполнить массив данными можно с помощью генератора случайных чисел Для этого используется класс Random: Контроль границ массива Выход за границы массива в C# расценивается как критическая ошибка, которая ведет к завершению работы программы и генерированию стандартного исключения - IndexOutOfRangeException. Рассмотрим следующий фрагмент программы: int[] myArray = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; Console.WriteLine(myArray[10]); В данном случае описан массив из 10 элементов. Так как нумерация элементов массива ведется с нуля, то последний элемент имеет номер 9, и, следовательно, элемента с номером 10 не существует. В этом случае выполнение программы завершится, о чем на консоль будет выдано соответствующее сообщение. |