|
Можно ли сдавать один и тот же тест несколько раз? |
Производные типы данных языка C++. Массивы и указатели
Производные типы
Производные типы можно условно подразделить на две группы:
-
Непосредственно производные типы. Эти типы являются производными от некоторых существующих типов, реализуя типы указателей, ссылки, функции преобразования типов. В группу непосредственно производных типов входят:
- массивы
- указатели
- ссылки
- перечисления
- указатели на члены класса.
-
Составные производные типы. В группу составных производных типов входят:
- классы
- структуры
- объединения
Массивы
Объявление массивов
Массив переменных или объектов состоит из определенного числа однотипных данных, называемых элементами массива. Все элементы массива индексируются последовательно, начиная с нуля.
Размещение элементов массива в памяти выполняется последовательно.
Количество элементов в массиве определяет размер массива и является константным выражением. Для создания динамических массивов стандартная библиотека C++ предусматривает тип vector.
Имя массива определяет адрес первого элемента массива.
Имя массива в отличие от имени вектора нельзя указывать в левой части оператора присваивания.
Объявление массива может иметь следующее формальное описание:
// Объявление одномерного массива
тип имя_массива[размерность_N];
// Объявление одномерного массива с
// одновременной инициализацией
тип имя_массива[размерность_N]=
{значение0, значение1, ..., значение_N-1};
// Объявление безразмерного массива с
// одновременной инициализацией:
// размерность определяется количеством
// значений, указанных в списке инициализации
тип имя_массива[]={значение0, значение1,
..., значение_N-1};
// Объявление многомерного массива
тип имя_массива[размерность_1N]...
[размерность_MN];
// Объявление многомерного массива с
// одновременной инициализацией
тип имя_массива
[размерность_N]... [размерность_M] =
{ {значение0, значение1, ..., значение_M-1},
...
{значение0N, значение1N, ..., значение_NM-1}};Размерность массива может:
- указываться любым константным выражением целого типа;
- автоматически определяться компилятором по списку значений инициализации массива (если размерность не указана явно).
Например:
int arrayOfInteger[17];
// Массив из 17 переменных типа int
char arrayOfChar_3[3]={'L','M','N'};
// Объявление и инициализация
// символьного массива
char arrayOfChar_0[]={"Array of char. \n"};
int arrayOfInteger_6[2][3]= {
{1,2,3}, {11,12,13}};
// Объявление и инициализация
// двумерного массиваЕсли ни размерность массива, ни список значений инициализации не указаны, то будет создан массив нулевой длины.
Объявление многомерных массивов выполняется по следующим правилам:
- список значений инициализации можно указывать как в единых фигурных скобках, так и в общих фигурных скобках, включающих через запятую списки по каждому левому индексу в отдельных фигурных скобках;
- при использовании общих фигурных скобок сначала следует указывать значения для неизменяемого самого левого индекса;
- можно не указывать только самую левую размерность массива, получая ее значение из списка значений инициализации.
Инициализацию массива можно выполнить одним из следующих способов:
- указать во время объявления массива в фигурных скобках значения инициализации (начиная с нулевого элемента и первого столбца);
- присвоить значение элементам массива во время выполнения программы;
- объявить массив как глобальный или статический, инициализируемый по умолчанию (для числовых значений выполняется инициализация нулями, а для указателей - значением null ). Глобальный массив объявляется вне всех функций, а статический массив объявляется с модификатором static.
Если количество значений инициализации больше, чем объявленная размерность массива, то компилятор Visual C++ инициирует ошибку.
Если количество значений инициализации меньше, чем объявленная размерность массива, то оставшиеся значения автоматически инициализируются нулями.