Описание массива позволяет использовать в программе любой из его элементов. Для обозначения элементов массива в Си используются индексированные переменные.
Индексированная переменная (индексное выражение) – обозначение ячейки для хранения элемента массива. Именуется указанием идентификатора массива и индекса (индексов) элемента.
ü Внимание ! Особенность обозначения элементов массива в Си - нумерация индексов от 0, а не от 1. Поэтому индексы в Си на единицу меньше заданных математически. Это обстоятельство должно учитываться в программе, особенно при формировании условия повторения (выхода из) цикла.
Схема распределения памяти для хранения одномерного массива такова:
| индекс 0
| индекс 1
| индекс 2
|
|
|
| индекс i-1
|
|
|
| индекс n-2
| индекс n-1
|
|
| 1-й
элемент
| 2-й
элемент
| 3-й
элемент
| ..
| ..
| ..
| i-й
элемент
| ..
| ..
| ..
| n-1-й
элемент
| n-й
элемент
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Длина ячейки для хранения каждого элемента определяется типом массива:
· символьный – 1 байт;
· целочисленный – 2 байта;
· вещественный – 4 байта;
· двойной точности – 8 байт.
Структура обозначения индексированной переменной одномерного массива:
имя[индекс]
, где имя – идентификатор массива;
индекс – операнд целого типа, определяющий номер элемента в ряду других, составляющих массив;
[ ] – ограничители индекса.
Например, в описанном ранее массиве D(16) первый элемент обозначается индексным выражением d[0], второй – d[1], текущий – d[i], предпоследний – d[14] и последний – d[15].
При необходимости индекс может задаваться арифметическим выражением. Например, d[i+2] или d[jx5+3]. В любом случае на момент использования переменной индекс должен быть определен (рассчитан) и полученное значение должно укладываться в заданный описателем диапазон.
Рассмотренный пример идентификации элементов массива D применим к любому из описанных одномерных массивов.
Индексированные переменные позволяют осуществить программную реализацию алгоритмов с использованием элементов массивов. При этом для одномерного массива индексированная переменная позволяет определить конкретный адрес каждого элемента.
Адрес любой переменной определяется операцией & . Следовательно, у элемента d[0] адрес – &d[0], у d[i] – &d[i], т.е. все элементы массива располагаются в оперативной памяти линейно, начиная с адреса &d[0].
В языке Си идентификатор одномерного массива однозначно определяет адрес его первого элемента. Например, c º &c[0], d º &d[0].
Адрес каждого элемента одномерного массива выражается зависимостью имя+индекс (индекс определяет сдвиг элемента относительно первого на указанное им количество элементов). Например, &c[i] (адрес i-го элемента массива С) вычисляется как c+i.
Таким образом, индексное выражение полностью определяет конкретную ячейку хранения соответствующего элемента.