Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЗФ_ОАиП / Лекции ГГУ Скорины - Программирование.doc
Скачиваний:
179
Добавлен:
21.03.2016
Размер:
2.27 Mб
Скачать

12. Массивы

Очень часто в программе требуется сохранять и обрабатывать некоторое множество значений одного и того же типа. Как вы должны уже знать, в таких случаях используют массивы.

Массив – это совокупность элементов данных одного и того же типа, объединенных общим именем и расположенных в непрерывной области памяти вплотную друг за другом так, что к каждому элементу массива можно получить доступ, зная его порядковый номер или индекс.

12.1. Описание массива

Описание массива производится с помощью обычного оператора описания, при этом за именем массива в квадратных скобках должна быть записана целая положительная константа или константное выражение, равное размеру этого массива, то есть максимально возможному числу элементов.

#define N_MAX 100

const int N =10;

int a[5], b[2*40], K = 10;

// int mas[K]; - ошибка

double c[N];

char d[N_MAX];

В таком виде, все элементы массива ещё не инициализированы, т.е. содержат случайные значения.

Имя массива с квадратными скобками, в которых записано индексное выражение целого типа, обозначает значение соответствующего элемента массива. В языке С нумерация элементов массива начинается с нуля, то есть в массиве a из пяти элементов есть следующие элементы: a[0], a[1], a[2], a[3], a[4].

При работе с индексированными переменными необходимо внимательно следить за тем, чтобы индексы не вышли за пределы допустимого диапазона, определяемого при описании массива (от 0 до n-1). Дело в том, что компилятор C не проверяет факт выхода индексов за границы массива, а при ошибочном занесении данных за пределы массива может запортиться нужная информация и, скорее всего, программа зависнет.

12.2. Инициализация массива

Инициализация – это присвоение значений вместе с описанием данных. Ранее мы уже рассматривали инициализацию простых переменных: int a = 5;

Для инициализации массива за его именем располагают знак присваивания и список инициализации, который представляет собой заключенные в фигурные скобки и разделенные запятыми инициализирующие значения.

int a[5] = {1, 2, 3, 4, 5};

Но нельзя написать по аналогии с переменными:

int x; x=5;

int a[5]; // a = {1, 2, 3, 4, 5}; - ошибка

Констант в списке инициализации должно быть не больше, чем объявленный размер массива. Если их меньше, то элементы, для которых нет констант, обнуляются.

int a[5] = {1, 2, 3}; // a[3] = a[4] = 0

Для инициализируемого массива допускается вообще не указывать размер массива. В этом случае размер массива определяется компилятором по количеству констант.

int a[] = {1, 2, 3, 4, 5}; // компилятор выделит 10 байт для хранения массива из 5 двухбайтовых целых чисел

Как в программе вычислить реальную длину массива, задаваемого в виде: TYPE mas[] = { ....... }; , т.е. без явного указания размера:

Количество элементов в таком массиве можно вычислить так:

N_MAS = sizeof(mas) / sizeof(mas[0]);

или

N_MAS = sizeof(mas) / sizeof(TYPE);

Оба способа выдадут число, равное N (sizeof(mas) выдает размер всего массива в байтах, а sizeof(mas[0]) или sizeof(TYPE) выдают размер одного элемента).