Объявление одномерного массива
Понятие массива
Поскольку при решении очень многих задач требуется именно такая обработка, для нее в любом процедурном языке существует понятие массива – ограниченной совокупности однотипных величин. Введение понятия массива позволяет широко использовать циклические процессы, получая компактные коды программ.
Массив – это список связанных элементов одинакового типа, обращение к которым происходит с использованием общего для всех имени. Например, список студентов некоторой группы. Каждый элемент массива имеет свой порядковый номер (индекс) в последовательности:известно какая величина является в ней первой, какая второй и т.д., и в этом плане массив является упорядоченной последовательностью.
Создание массива начинается с выделения памяти под его элементы. Элементами массива могут быть величины как значимых, так и ссылочных типов (в том числе массивы).
Массив значимых типов хранит значения, массив ссылочных типов – ссылки на элементы. Всем элементам при создании массива присваиваются значения по умолчанию: нули для значимых типов и null – для ссылочных.
В С# массивы могут быть одномерными или многомерными. Многомерные массивы, в свою очередь, могут быть прямоугольными и ступенчатыми.
Объявление одномерного массива
Одномерный массив – это такой массив, для идентификации которого требуется указать значение только одного индекса.
Для объявления одномерного массива в общем случае используется следующая форма записи:
тип[] имя_массива = new тип [размер];
Здесь тип определяет базовый тип массива – тип элементов массива. Квадратные скобки, следующие за объявлением типа, являются признаком объявления одномерного массива. Количество элементов в массиве задает [размер]. Массивы реализуются в виде объектов, относится к ссылочным типам данных, то есть располагается в динамической области памяти, и их создание представляет собой двухфазный процесс:
- объявление ссылочной переменной;
- выделение области памяти для массива; объявленной переменной присваивается ссылка на выделенную область памяти для массива.
В языке С# массивы динамически размещаются в памяти с помощью оператора new. Оператор создания массива из 4 целых чисел имеет вид:
int[ ] b = new int[4];
В первом операторе описан массив b, состоящий из четырех элементов значимого типа int[ ]. Операция new выделяет память под 4 целых элемента, и они заполняются нулями.
Оператор создания массива из 3 строк имеет следующий вид:
string[ ] s = new string[3];
Во втором операторе описан массив s ссылочного типа string[ ]. Операция new выделяет память под 3 ссылки на строки, и эти ссылки заполняются значением null. Память под сами строки, составляющие массив, не выделяется – это необходимо будет сделать перед заполнением массива.
Объявление массива можно провести и двумя шагами:
int[ ] b;
b = new int[4];
Первое объявление фактически содержит только ссылку на массив, а память под элементы массива еще не выделена. Второй же оператор обеспечивает выделение необходимой памяти.
Количество элементов в массиве задается при выделении памяти и не может быть изменено впоследствии. Размерность может задаваться не только константой, но и выражением. Значение этого выражения должно быть неотрицательным, а его тип должен иметь неявное преобразование к int, uint, long или ulong.
Пример размерности массива, заданной выражением:
short m = . . . ;
string[ ] s = new string[m + 1];
Доступ к отдельному элементу массива осуществляется с помощью индексации. Индекс указывает позицию элемента внутри массива. В C# элементы массива нумеруются с нуля, поэтому максимальное значение индекса элемента массива всегда на единицу меньше размерности (например, в описанном выше массиве b элементы имеют индексы от 0 до 3). Для обращения к элементу массива используется конструкция «переменная с индексом», где после имени массива в квадратных скобках указывается порядковый номер элемента в массиве, например: b[2], s[i].
Элементы массива могут участвовать во всех операциях, которые допустимы для простых переменных того же типа. При работе с массивом программисту необходимо внимательно следить за тем, чтобы его индекс не принял значение, лежащее за границами его описания, т.е. не разрешать программе работать с чужой областью памяти.
В С# для предотвращения подобной ситуации автоматически выполняется контроль выхода индекса за его объявленные границы и, если индекс принимает недопустимое значение, генерируется исключение:
IndexOutOfRangeException.
Массивы одного типа можно присваивать друг другу. При этом происходит присваивание ссылок, а не элементов, как и для любого другого объекта ссылочного типа, например:
int [ ] а = new int[10];
int[ ] b = а;
Результатом приведенных объявлений является то, что b и а указывают на один и тот же массив данных.