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 элемента.
Многомерный массив в Си есть массив массивов, т.е. массив, элементами которго служат массивы. Объявление многомерного массива v должно содержать сведения о типе, размерности и количестве элементов по каждому измерению. Вот как это выглядит
mun v[ ] [ ]…[ ];
Где р представляет собой размерность массива (значит, объявление двумерного массива содержит два константных выражения[ ] [ ], трёхмерного – три [ ] [ ][ ] и т.д.) Однотипные массивы удобно объявлять одним оператором. Здесь же элементам любого массива можно присвоить начальные значения. К примеру, объявим и зададим начальные значения элементам матрицы
А =
double А[3][3] ={ {1..,2..,3.}, {4..,5..,6. }, {7..,8..,9. }}
Внешние фигурные скобки окаймляют весь список значений, а внутренние – элементы каждой строки матрицы А. Чтобы обратится к элементу матрицы А, нужно использовать индексированное имя А[0][0].
Многомерные массивы может задаваться так
А[k][i][j], где
k –номер слоя;
i – номер строки;
j – номер столбца.
Объявляя массив из строк, необходимо использовать два константных выражения: первое задает количество строк в массиве, а второе указывает длину каждой строки. Например,
#define L 81
char T[12][4]={“Dec”, “Jan”, “Feb”, “Mar”, “Apr”, “May”, “Jun”, “Jul”, “Sep”, “Oct”, “Nov”};
P[][L]={“В”, “зыбком”, “мире”, “вещественных”, “чисел”, “осторожность”, “не”, “может”, “быть”, “лишней”};
Здесь определение char T[12][4] задает 12 строковых переменных T[0], T[1]…, T[11] длиной не более 3 символов каждая. Тогда, чтобы вывести на экран последнюю строку, надо указать имя T[11]. Имя T[11][0] выводит первый символ этой строки. Число строк массива Р равно sizeof(P)/sizeof(P[0]).
Пример,
Рассмотрим массив
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]