Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
информатика экзамен.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
935.42 Кб
Скачать

1. Объявление массива

Объявление массива имеет следующий синтаксис:

<спецификация типа> <имя> [<константное выражение>];

<спецификация типа> <имя> [ ];

Здесь квадратные скобки являются элементом синтаксиса, а не признаком необязательности конструкции.

Объявление массива может иметь одну из двух синтаксических форм, указанных выше. Квадратные скобки, следующие за именем, – признак того, что переменная является массивом. Константное выражение, заключенное в квадратные скобки определяет число элементов в массиве. Индексация элементов массива в языке C++ начинается с нуля. Таким образом, последний элемент массива имеет индекс на единицу меньше, чем число элементов массива.

Во второй синтаксической форме константное выражение в квадратных скобках опущено. Эта форма может быть использована, если в объявлении массива присутствует инициализатор, либо массив объявляется как формальный параметр функции, либо данное объявление является ссылкой на объявление массива где-то в другом месте программы. Однако для многомерного массива может быть опущена только первая размерность.

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

<спецификация типа> <имя> [<константное выражение>][<константное выражение>] ... ;

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

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

Примеры объявлений массивов

int x[10];

// Одномерный массив из 10 целых чисел. Индексы меняются от 0 до 9.

double y[2][10];

// Двумерный массив вещественных чисел из 2 строк и 10 столбцов.

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

Инициализация массива – это присваивание элементам массива начальных значений. Инициализацию массива можно выполнить на этапе описания массива, как это показано в п.1.1. Но в том случае, когда начальные значения получают лишь некоторые элементы массива, а остальные вычисляются в процессе выполнения программы, в программе записывают операторы присваивания

Как и простые переменные, массивы могут быть инициализированы при объявлении. Инициализатор для объектов составных типов (каким является массив) состоит из списка инициализаторов, разделенных запятыми и заключенных в фигурные скобки. Каждый инициализатор в списке представляет собой либо константу соответствующего типа, либо, в свою очередь, список инициализаторов. Эта конструкция используется для инициализации многомерных массивов.

Наличие списка инициализаторов в объявлении массива позволяет не указывать число элементов по его первой размерности. В этом случае количество элементов в списке инициализаторов и определяет число элементов по первой размерности массива. Тем самым определяется размер памяти, необходимой для хранения массива. Число элементов по остальным размерностям массива, кроме первой, указывать обязательно.

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

Примеры инициализации массивов

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

// Число инициализаторов равно числу элементов

double b[5] = {0.1, 0.2, 0.3};

// Число инициализаторов меньше числа элементов

int c[ ] = {1, 2, 4, 8, 16};

// Число элементов массива определяется по числу инициализаторов

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

// Инициализация двумерного массива. Массив состоит из двух строк,

// в каждой из которых по 3 элемента. Элементы первой строки

// получают значения 0, 1 и 2, а второй – значения 3, 4 и 5.

int e[3] = {0, 1, 2, 3};

// Ошибка – число инициализаторов больше числа элементов

Обратите внимание, что не существует присваивания массиву, соответствующего описанному выше способу инициализации.

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

// Объявление и инициализация

a = {0, 1, 2};

// Ошибка

15) В дополнение к вводу/выводу на консоль и в файлы, система ввода/вывода языка С++ позволяет осуществлять ввод/вывод в массивы. Ввод/вывод на основе массивов использует память в качестве устройства для ввода и вывода. Ввод/вывод на основе массивов осуществляется с помощью обыч­ных потоков С++. Фактически вся представленная в предыдущем разделе информация применима к вводу/выводу на основе массивов. Единственное, что делает ввод/вывод на основе массивов уни­кальным, заключается в том, что состыкованным с потоком устройством служит память.

В некоторой литературе по С++ ввод/вывод на основе массивов (array-based I/O) называют также вводом/выводом в память (in-RAM I/O). Поскольку потоки способны форматировать ин­формацию, то иногда ввод/вывод на основе массивов называют также форматированием в памя­ти (in-RAM formatting).

Вывод на основе массивов С++ подобен использованию функций sprintf() и sscanf() в языке С. В обоих случаях память используется в качестве устройства для ввода и вывода.

Для использования ввода/вывода на основе массивов необходимо включить в программу заго­ловочный файл strstrea.h.