Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_Программирование_1.doc
Скачиваний:
8
Добавлен:
19.11.2019
Размер:
501.25 Кб
Скачать

5.2.Свойства массивов

Как видно из рассмотренного примера, массив позволяет создать определенное количество переменных одного типа и обращаться к ним по индексу. Отметим некоторые важные особенности массивов.

Массивы могут содержать переменные любых типов. Так, например, можно объявить массив из 10 вещественных чисел:

float a[10];

Как и переменные, массив можно инициализировать при объявлении. Для этого нужно указать элементы массива в фигурных скобках через запятую. При этом указывать размер массива в квадратных скобках необязательно. Например:

float a[] = {1, 1.5, 2, 2.5, 3};

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

Все элементы массива должны быть одного типа. Другими словами, все элементы массива занимают одинаковый объем памяти и над ними можно выполнять одинаковые операции.

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

Можно сказать, что оператор индексирования a[i] фактически означает сумму адреса первого элемента и числа i умноженного на размер одного элемента.

Важно отметить два важных последствия такого свойства оператора индексирования.

Поскольку первый элемент массива расположен в самом его начале, то он должен иметь индекс 0. Поэтому массивы в С и нумеруются с 0.

Оператор индексирования не сравнивает передаваемый ему индекс с размером массива. Если в программе был создан массив из 10 элементов, а затем произошло обращение к 15 элементу, компилятор не выдаст сообщения об ошибке. Это может привести к тому, что вы запишите данных в область памяти за пределами массива или даже за пределами вашей программы.

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

В других языках программирования, или при использовании специальных библиотек языка С, может быть использована более высокоуровневая концепция массива. Более высокий уровень концепции массива подразумевает, что операторы выполняют за программиста часть действий. В простейшем случае элементы высокоуровневого массива нумеруются в естественном порядке, начиная с 1. Бывают массивы, в которых при попытке вызова элемента, находящегося за границей массива, происходит сообщение об ошибке (например, в языке Паскаль). Возможна реализация динамических массивов, размеры которого можно изменить во время исполнения программы. Обратной стороной высокоуровневых массивов является большее количество операций, требуемых при обращении к элементу массива, и, как следствие, более медленная работа программ.