- •Преобразование типов указателей
- •Операторы определения адреса и обращения по адресу
- •Указатели на константы и константные указатели
- •Арифметические действия с указателями
- •Одномерные и многомерные массивы.
- •Строки символов. Основные функции для работы со строками.
- •Перечисление.
- •Структура.
- •Объединения.
- •Битовые поля.
- •Тип данных bool. Тип данных wchar_t.
- •Способы передачи параметров в подпрограммы.
- •Операторы распределения памяти.
- •Объявление typedef.
- •Оператор sizeof.
- •Передача аргументов по умолчанию.
- •Встроенные функции.
- •Определение пространства имён.
- •Оператор разрешения области видимости.
- •Объявление «using». Директива «using». Псевдонимы.
- •Механизм обработки исключений.
- •Вложенные исключения.
- •Определение класса.
- •Указатель this. Спецификаторы доступа к членам класса.
- •«Друзья» класса.
- •Конструктор класса. Список инициализации.
- •Конструктор по умолчанию.
- •Конструктор копирования.
- •Явные конструкторы.
- •Деструкторы.
- •Встроенные функции–члены класса. Статические члены класса.
- •Функции-члены класса с квалификаторами const и volatile.
- •Вложенные классы. Локальные классы.
- •Общие правила перегрузки операторов.
- •Перегрузка оператора присваивания.
- •Оператор индексирования [].
- •Перегрузка бинарных операторов.
- •Составные операторы присваивания.
- •Оператор вызова функции.
- •Операторы преобразования типов (конверторы).
- •Структура данных – стек.
- •Структура данных – очередь.
- •Деревья.
- •Наследование
- •Доступ к членам наследуемого класса
- •Конструкторы, деструкторы и наследование
- •Наследование и присваивание.
- •Виртуальные функции.
- •Полиморфизм и позднее связывание.
- •Передача аргументов по умолчанию в виртуальные функции.
- •Виртуальные деструкторы.
- •Абстрактные классы.
- •Множественное наследование.
- •Виртуальное наследование.
Одномерные и многомерные массивы.
Массив – конечная последовательность однотипных элементов, которые хранятся в непрерывной области памяти друг за другом.
Единица данных массива называется элементом массива.
Доступ к элементам массива производится по их номерам в последовательности, которая называется индексами.
Одномерный массив объявляется следующим образом:
спецификатор типа идентификатор [диапазон];
Спецификатор типа определяет тип элементов массива. Идентификатор определяет имя массива. Диапазон определяет количество элементов массива.
При этом имя массива является константным указателем на его 1-й элемент. Диапазон должен быть задан положительным целочисленным литералом или именованной константой.
Пример:
int a [10]; //целочисленный литерал
const int n = 10;
int a [n]; //именованная константа
При объявлении массива его можно явно инициализировать, перечисляя значения элементов массива в фигурных скобках в порядке возрастания индекса.
char a [3] = {‘a’, ‘b’, ‘c’};
int a [3] = {0, 7, 5};
При инициализации массива возможны 3 ситуации:
диапазон массива = количеству значений в списке. В этом случае операция инициализации завершается успешно;
количество значений в списке меньше, чем диапазон массива. В этом случае 1-е элементы инициализируются указанными элементами, а оставшиеся заполняются нулями;
количество значений в списке инициализации больше, чем диапазон массива. В этом случае выдаётся сообщение об ошибке.
Если значения элементов массива перечисляются явно, то размерность массива можно не указывать. В этом случае компилятор сам определит количество элементов массива и выделит необходимый объём памяти:
int [] = {0, 7, 5};
Доступ к элементам массива выполняется при помощи оператора индексирования, который обозначается квадратными скобками и имеет вид:
идентификатор массива [индекс];
Возвращает оператор индексирования L-value. Это означает, что значение можно читать и менять значение элементов массива.
int a [3] = {0, 7, 5};
int k = a [1];
a [2] = 10; // {0, 7, 10};
Замечание: 1) нумерация элементов массива всегда начинается с 0ж
2) т.к. имя массива фактически представляет собой указатель, то оператор индексирования может применяться к любым указателям, следовательно, имя массива может быть также операндом оператора разыменования.
Многомерные массивы
Массив, элементы которого нумеруются несколькими индексами, называется многомерным. Допускается наличие 12-ти индексов.
Тип многомерного массива определяется следующим образом:
спецификатор_типа [диапазон_1]…[диапазон_n];
При объявлении многомерного массива память резервируется под все элементы сразу, а элементы располагаются построчно.
Двумерный массив:
int arr [2][2] – матрица 2*2;
Проинициализировать можно так:
int a [2][2] = {1, 1, 2, 2};
int a [2][2] = {{1, 1}, {2, 2}};
Для доступа к элементам многомерного массива используют оператор индексирования [ ]. Нумерация элементов начинается с 0.
int n = a [1][1]; //n = 2;
a00 a01
a10 a11
Для ввода-вывода этих элементов необходимо использовать операторы цикла:
int a [5][5];
int i,s;
printf (“input elements: ”);
for (i = 0; i<5; i++)
for (s = 0; s<5; s++)
scanf (“%d”, a [i][s]);
Обычные задачи на матрицы. И специфические задачи на поиск выхода из лабиринта, поиск пути к кладу, магические квадраты.
В качестве примеров приводятся задачи на нахождение чётных элементов, на треугольники (правый нижний и левый верхний), алгоритм полного перебора.