3.3 Массивы в Си
Массив – это структура данных, используемая для хранения набора элементов данных одного и того же типа.
Использование массива позволяет связать одно имя переменной с целой группой однотипных элементов данных.
Отдельные элементы данных в массиве хранятся в смежных ячейках памяти. Поскольку каждый элемент хранится в отдельной ячейке памяти, отдельные элементы можно обрабатывать неоднократно и в произвольном порядке.
Для обработки данных, хранимых в массиве, к каждому отдельному элементу можно обращаться, указывая имя массива и номер нужного элемента.
Индексированная переменная
x[0] служит для обращения к начальному, или 0-му элементу массива х,
x[1] – к следующему, а
x[n] – к последнему.
Целое, заключенное в квадратные скобки, называется индексом, и его величина может быть в диапазоне от 0 до значения, на единицу меньшего, чем общее число ячеек памяти в массиве.
В Си одномерный массив объявляется оператором вида
mun v[ l];
где mun есть тип данных (int, double),
а l – целочисленное константное выражение. Его значение представляет собой количество элементов(длина) массива.
Массиву v выделяется память из l*mun байтов.
Первый элемент массива имеет нулевой индекс,
а индекс последнего элемента равен l-1.
Например, объявление
double Х[3];
определяет три элемента: Х[0] Х[1] и Х[2].
Константное выражение в объявлении массива можно опустить в следующих трёх случаях:
-
Когда в объявлении массива элементам явно задаются начальные значения; в этом случае длину массива компилятор определяет по количеству констант. Пример:
double Х[]={1.,1.,1.};
-
Когда массив объявляется как внешний; при этом ему в другом месте программы выделена память и (возможно) присвоены начальные значения.
-
Когда массив является формальным параметром (указан в заголовке и прототипе функции).
При этом элементам массивов можно назначить начальные значения.
Пример, объявление
Char U[]=“Эх-хо!”,
V[10]=”И-и-и-эх”,
He[5]=“Фрол”,
She[4]={‘А’, ‘д’, ‘а’, ‘\0’};
устанавливает, что массив U состоит из 6 элементов, V – из 9, He – из 4 и She содержит 3 элемента.
Пример,
Рассмотрим массив
x[0] x[1] x[2] x[3] x[4] x[5] x[6] x[7]
12,0
6,0
-54,5
14,0
12,0
2,5
8,0
16,0
В таблице представлен ряд операторов с обращением к элементам этого массива.
Оператор |
Пояснение |
Printf(“%.1f”,x[0]); |
Выводит значение x[0], равное 16,0 |
x[3] = 25.0; |
Сохраняет значение 25,0 в x[3] |
sum = x[0]+x[1]; |
Сохраняет сумму x[0] и x[1], равную 28,0 в переменную sum |
sum+= x[2]; |
Прибавляет x[2] к sum. Новая sum равна 34,0 |
x[3]+=1.0; |
Прибавляет 1,0 к x[3]. Новый x[3] равен 26,0 |
x[2] = x[0]+x[1]; |
Сохраняет сумму x[0] и x[1] в x[2]. Новый x[2] равен 28,0 |
Содержание массива х после выполнения этих операторов:
x[0] x[1] x[2] x[3] x[4] x[5] x[6] x[7]
Объявление массивов.
СИНТАКСИС:
тип_элемента aname[размер];
/*неинициализированный массив*/
тип_элемента aname[размер]={список инициализаторов};
/*инициализированный массив*/
ПРИМЕР:
#define A_SIZE 5
…
double a[A_SIZE];
char vowels[] = {‘A’, ‘E’, ‘I’, ‘O’, ‘U’};
ОПИСАНИЕ: Объявление неинициализированного массива резервирует память для массива aname, занимающего размер ячеек памяти. В каждой ячейке памяти может храниться один элемент данных типа тип_элемента (double, int или char). К отдельным элементам можно обращаться при помощи индексированных переменных aname[1], …, aname[размер]. Для указания размерности массива используется константа типа int.
В объявлении массива с инициализацией размер, указанный в квадратных скобках, необязателен, так как может быть определён длинной списка инициализации.
Список инициализации состоит из выражений-констант типа, указанного в тип_элемента, и отделенных друг от друга запятыми.
Элемент 0 инициализируемого массива должен быть первым в списке инициализации, элемент1 –вторым, и т.д.