Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C++ лекции.doc
Скачиваний:
22
Добавлен:
21.04.2019
Размер:
536.06 Кб
Скачать

9. Массивы

Когда необходимо хранить в памяти небольшое количество данных — можно использовать обычные переменные. 3 стороны треугольника, координаты точки на плоскости, для таких случаев достаточно использовать переменные. Однако очень часто количество данных настолько велико, что использовать переменные становится невозможно. 1000 точек на плоскости — в таком случае в переменными уже не возможно справиться. Более того, когда изначально количество данных неизвестно — задача становится нерешимой без использования массивов (с другими структурами данных вы познакомитесь позже).

Массив — набор однотипных значений, к которым можно обратиться по индексу (номеру)

Допустим, есть 10 бутылок газировки. Если поставить их в ряд, то можно сказать: в первой бутылке — 250мл газировки, во второй бутылке — 500мл газировки, в третьей — 100мл, в четвертой — 0, и так далее.

I II III IV V VI VII VIII IX X

Ряд бутылок можно назвать массивом бутылок. Тогда номер бутылки будет её индексом в массиве.

Точно так же можно представить себе массив целочисленных значений:

14

43

-13

0

23

63

87

23

69

34

I

II

III

IV

V

VI

VII

VIII

IX

X

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

9.1 Объявление массивов

Для того, что бы в C создать массив, нужно при объявлении массива добавить после имени переменной квадратные скобки, в которых написать размер массива:

тип имя_переменной[размер_массива];

Например:

int array[10];

int another_array[11];

double floating_point_arr[1000];

bool bools[1];

int n = 10;

int some[n];

Здесь создаются 5 массивов:

  • array является массивом из 10 целочисленных значений

  • another_array – массив из 11 целочисленных значений

  • floating_point_arr – массив из 1000 значений типа double

  • bools – массив из одного булевого значения (да, массив может состоять из одного элемента, а почему бы и нет?)

  • some – массив, размер которого зависит от величины переменной n. Эта переменная равна 10, но так же она могла бы быть считана с клавиатуры.

Количество элементов — положительное целочисленное значение (unsigned int). Если вы случайно напишите в квадратных скобках отрицательную величину — компилятор выдаст ошибку. Если же в пятом примере (int some[n]) перменная n была бы отрицательной — то она была бы приведена к положительному через переполнение, что наверняка вызвало бы ошибку. То же самое произойдет, если переменная n не будет инициализирована.

9.2 Инициализация массивов

Как же инициализировать массив? Изначально в ячейках массива содержится мусор. Существует 2 способа инициализации массива: при объявлении и установкой значений ячеек.

Что бы инициализировать массив при объявлении, надо написать следующую конструкцию:

тип имя_переменной[] = {значение1, значение2, …};

Где в фигурных скобках через запятую перечисляются значения, которыми должен инициализироваться массив. При инициализации во время объявления размер массива можно не указывать. Например:

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

int aaa[3] = {1, 2, 3};

int bbb[10] = {1, 2, 3, 4};

В этом примере будет создан массив с именем переменной integers, в котором будет храниться 6 элементов — 1, 2, 3, 4, 5 и 6. Массив aaa будет инициализирован значениями 1, 2, 3. Массив bbb будет содержать значения 1, 2, 3, 4 и 6 ячеек мусора.

При инициализации во время объявления вы не можете создать массив с переменным размером (aaa[n]). Кроме того, если указан размер массива — количество инициализирующих значений не должно быть больше размера массива (int aaa[2] = {1, 2, 3} - ошибка)

Второй способ — установить значение каждой ячейки по отдельности. Что бы получить какую-либо ячейку массива, нужно написать имя переменной, хранящей массив, а после имени — квадратные скобки, в которых нужно указать индекс элемента.

Обратите внимание! В C нумерация ячеек начинается с нуля! Таким образом, что бы получить первую ячейку массива array, необходимо написать

array[0]

Получив ячейку массива, можно работать с ней, как с обычной переменной — присваивать в неё значение, передавать в функции, …

int array[10];

array[0] = 1;

array[1] = 2;

array[2] = 3;

array[3] = 4;

array[4] = 5;

array[5] = 6;

array[6] = 7;

array[7] = 8;

array[8] = 9;

array[9] = 10;

Как вы видите, последняя ячейка массива имеет индекс, на единицу меньший размера массива (9). Всего же в массиве array – 10 элементов.

Для инициализации массивов (особенно, больших, или таких, в которых заранее не известно количество элементов) очень удобно использовать циклы.

#include <stdio.h>

int main() {

int n; // размер массива

printf("Введите размер массива: ");

scanf("%d", &n);

int arr[n]; // массив создается после инициализации n

for (int i = 0; i < n; ++i) { // i – индекс заполняемого элемента

arr[i] = i + 1; // значение в ячейке больше индекса ячейки на 1

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]