При решении задач с большим количеством данных одинакового типа
использование переменных с различными именами, не упорядоченных по адресам
памяти, затрудняет программирование. В подобных случаях в языке Си используют
структуры, называемые массивами.
Массив — это непрерывный участок памяти, содержащий последовательность
объектов одинакового типа, обозначаемый одним именем.
Массив характеризуется следующими основными понятиями:
Элемент массива (значение элемента массива) – значение, хранящееся в
определенной ячейке памяти, расположенной в пределах массива, а также адрес этой
ячейки памяти.
Каждый элемент массива характеризуется тремя величинами:
* адресом элемента – адресом начальной ячейки памяти, в которой
расположен этот элемент;
* индексом элемента (порядковым номером элемента в массиве);
* значением элемента.
Адрес массива – адрес начального элемента массива.
Имя массива – идентификатор, используемый для обращения к элементам массива.
Размер массива – количество элементов массива
Размер элемента – количество байт, занимаемых одним элементом массива.
Графически расположение массива в памяти компьютера можно представить в виде непрерывной ленты адресов.
Представленный на рисунке массив содержит q элементов с индексами
от 0 до q-1. Каждый элемент занимает в памяти компьютера k байт, причем расположение элементов в памяти последовательное.
Адреса i-го элемента массива имеет значение n+k·i
Адрес массива представляет собой адрес начального (нулевого) элемента массива. Для обращения к элементам массива используется порядковый номер индекс) элемента, начальное значение которого равно 0. Так, если массив содержит q элементов, то индексы элементов массива меняются в пределах от 0 до .
Длина массива – количество байт, отводимое в памяти для хранения всех элементов массива.
Стандартный вид объявления одномерного массива следующий:
```c++
тип имя_переменной [размер];
```
В Си массивы должны определяться однозначно, чтобы компилятор мог
выделить для них место в памяти. Здесь тип объявляет базовый тип массива и является
типом каждого элемента массива. Параметр размер определяет, сколько элементов
содержит массив.
Для объявления массива в языке Си также можно использовать следующий синтаксис:
```c++
тип имя[размер]={инициализация};
```
Инициализация представляет собой набор начальных значений элементов массива, указанных в фигурных скобках, и разделенных запятыми.
```c++
// массив a из 10 целых чисел:
int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
```
Если количество инициализирующих значений, указанных в фигурных скобках,меньше, чем количество элементов массива, указанное в квадратных скобках, то все оставшиеся элементы в массиве (для которых не хватило инициализирующих значений) будут равны нулю. Это свойство удобно использовать для задания нулевых
значений всем элементам массива.
```c++
int b[10] = {0}; // массив b из 10 элементов, инициализированных 0
```
Если массив проинициализирован при объявлении, то константные начальные значения его элементов указываются через запятую в фигурных скобках. В этом случае количество элементов в квадратных скобках может быть опущено.
```c++
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
```
При обращении к элементам массива индекс требуемого элемента указывается в квадратных скобках [].
```c++
#include <stdio.h>
int main(){
int a[] = { 5, 4, 3, 2, 1 }; // массив a содержит 5 элементов
printf("%d %d %d %d %d\n", a[0], a[1], a[2], a[3], a[4]);
getchar();
return 0;
}
```
Результат выполнения программы:
```c++
5, 4, 3, 2, 1
```
Однако часто требуется задавать значения элементов массива в процессе выполнения программы. При этом используется объявление массива без инициализации. В таком случае указание количества элементов в квадратных скобках обязательно:
```c++
int a[10];
```
Для задания начальных значений элементов массива очень часто используется параметрический цикл:
```c++
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a[5]; // объявлен массив a из 5 элементов
int i;
// Ввод элементов массива
for (i = 0; i<5; i++)
{
printf("a[%d] = ", i);
scanf("%d", &a[i]); // &a[i] - адрес i-го элемента массива
}
// Вывод элементов массива
for (i = 0; i<5; i++)
printf("%d ", a[i]); // пробел в формате печати обязателен
getchar(); getchar();
return 0;
}
```