- •Вопрос 12. Функции вывода puts() и сputs()
- •Вопрос 13 Адресация данных. Операции над адресами
- •Вопрос 17 Вложение конструкции оператора if
- •Вопрос 21. Директивы условной компиляции
- •Вопрос 22.Препроцессоры языка Си
- •Вопрос 24 Объявление и инициализация массивов
- •Вопрос 25 Символьные массивы. Объявление и инициализация
- •Вопрос 26. Указатели. Объявление и инициализация
- •Вопрос 27 Массивы и указатели в языке Си
- •Вопрос 28 Типовая структуры программы на языке Си. Функции языка
- •Вопрос 29 рекурсивные функции
- •Вопрос 30 Назначение и использование оператора return
- •Вопрос 31 Массивы и функции
- •Вопрос 33. Структуры в языке Си
- •Вопрос 36 Динамические массивы
- •Вопрос 35 Динамическое распределение памяти, оператор size of
Вопрос 24 Объявление и инициализация массивов
Ранее мы ввели типы данных, которые называются базовыми или встроенными. На основе этих типов язык Си позволяет строить другие более сложные типы данных и структуры данных.
Массивом называется набор данных одного и того же типа, собранных под одним именем. Каждый элемент массива определяется именем массива и порядковым номером элемента, который называется индексом. Индекс всегда является целым числом.
Основная форма объявления массива в программе:
Тип < имя массива > [размер 1] [размер 2]....[размер п];
Чаще всего используются одномерные массивы:
Тип <имя массива> [размер];
Тип - базовый тип элементов (int, float, char).Размер - количество элементов одномерного массива. В языке Си индекс всегда начинается с 0. Первый элемент -массива всегда имеет индекс 0. Например, если мы объявили массив int а [100], это значит массив содержит 100 элементов - от а [0] до а [99]. Для одномерного массива легко подсчитать, сколько байт в памяти будет занимать этот массив. N Килобайт = < размер базового типа > * < количество элементов >.Язык Си допускает двумерные массивы. Их можно назвать как: массив одномерных массивов. Двумерный массив int a[3][4] можно представить в виде таблички:
|
Номер столбца - второй индекс ( |
) | ||
Номер строки — первый индекс 1 0) __ |
А [0] [0] |
А[0][1] |
А [0] [2] |
А [0] [3] |
|
А[1][0] |
А [1] [1] |
А[1][2] |
А[1][3] |
|
А [2] [0] |
А [2] [1] |
А [2] [2] |
А [2] [3] |
В памяти ЭВМ массив располагается непрерывно по строкам, т. е.
а [0] [0], а [0] [1],.......а [0] [3], а [1] [0], а [1] [1],.....а [2] [3].
Следует помнить, что память для всех массивов, которые определены как глобальные, отводится во время компиляции, и сохраняется всё время, пока работает программа. Часто двумерные массивы используются для работы с таблицами, содержащими текст.
т |
U |
R |
В |
0 |
|
В |
А |
S |
I |
с |
\0 |
|
|
|
|
|
т |
U |
R |
В |
О |
|
С |
+ |
+ |
\0 |
|
|
|
|
|
|
|
Инициализацию массивов можно производить разными способами.
Первый способ.
float arr [6] = {1.1, 2.2, 3.3, 4.0, 5.0, 6}; // одномерный массив
int a [3] [5] = {1,2, 3,4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
Второй способ.
а[0] [0] = 1; а [0] [1] = 2; а [0] [2] = 3; а [0] [3] = 4
а [0] [4] = 5; а [0] [5] = 6; а [0] [6] = 7; а [0] [7] = 8 и т. д.
Многомерные массивы, в том числе и двумерные, можно инициализировать, рассматривая их как массив массивов.
Инициализации:
int a[3] [5] = {1,2,3,4,5,6,7,8,9, 10, 11, 12, 13, 14, 15}; и
int а [3] [5] = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}};
эквиваленты. Количество инициализаторов не обязательно i должно совпадать с количеством элементов массива. Если инициализаторов меньше, то оставшиеся элементы массива не определены.
В тоже время инициализации:
int а [3] [5] ={1,2, 3, 4, 5, 6, 7, 8, 9, 20, 11}; и
inta[3] [5] = {{1,2,3}, {4,5,6,7,8}, {9,10, 11}};
различны.
Соответствующие массивы будут заполнены следующим! образом:
В первом случае:
1 |
2 |
3 |
4 |
5 | ||
6 |
7 |
8 |
9 |
10 | ||
11 |
|
|
|
| ||
Во втором случае: | ||||||
1 |
2 |
3 |
|
| ||
4 |
5 |
6 |
7 |
8 | ||
9 |
10 |
11 |
|
|
В пустых клетках значения не определяются.