Объявление одномерного массива

Понятие массива

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

Массив – это список связанных элементов одинакового типа, обращение к которым происходит с использованием общего для всех имени. Например, список студентов некоторой группы. Каждый элемент массива имеет свой порядковый номер (индекс) в последовательности:известно какая величина является в ней первой, какая второй и т.д., и в этом плане массив является упорядоченной последовательностью.

Создание массива начинается с выделения памяти под его элементы. Элементами массива могут быть величины как значимых, так и ссылочных типов (в том числе массивы).

Массив значимых типов хранит значения, массив ссылочных типов – ссылки на элементы. Всем элементам при создании массива присваиваются значения по умолчанию: нули для значимых типов и 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 и а указывают на один и тот же массив данных.

Наши рекомендации