- •Простые типы данных и операции над данными. Приведение типов.
- •Void - пустой тип, используется для создания указателей и указания того, что функция не возвращает значений;
- •Выражения сравнения и логические операции.
- •Операторы инкремента и декремента.
- •Составные типы данных: массивы и строки.
- •Составные типы данных: структуры, указатели на структуры.
- •Указатель на тип void и методы работы с ним.
- •Составные типы данных: структуры и объединения.
- •Условные операторы.
- •If (выражение) инструкция1;
- •If (выражение)
- •If (выражение) инструкция1;
- •Циклы, виды циклов. Вложенные циклы. Алгоритмизация циклических процессов.
- •Пользовательские функции, прототипы.
- •14. Указатели и ссылки. Ссылочные переменные.
- •Перегрузка функций.
- •Передача параметров в функцию и вызов функции.
- •1. Вызов функции.
- •2. О аргументах и параметрах
- •Передача указателей и массивов в качестве аргументов функций.
- •Использование указателя для обеспечения вызова по ссылке. Ссылочные параметры.
- •Стек и динамическая память.
- •Простые типы данных и операции над данными. Приведение типов. Константы, квалификатор const.
- •Указатели и динамическое распределение памяти.
Указатели и динамическое распределение памяти.
Указатель – это переменная, содержащая адрес другой переменной. Указатель представляет собой группу ячеек памяти, которые содержат адрес какой-либо переменной. Указатель на переменную объявляется следующим образом:int * px;
Указатели принято инициализировать при объявлении либо нулем (указатель не содержит адреса и не указывает ни на какой объект), int * px = 0;
либо адресом другой переменной: int x;int * px = &x;
Одноместная унарная операция & дает адрес объекта (переменной). В этом случае говорят, что px указывает на x. Одноместная операция * называется операцией ссылки по указателю (indirection) или разыменовывания (dereferencing). Применяя ее к указателю, получаем объект (переменную), на который он указывает:
Поскольку указатели сами являются переменными, их можно употреблять без разыменовывания/
Следует заметить, что любой указатель может указывать только на объекты одного конкретного типа данных, заданного при его объявлении. Т.е. указатель типа double * не может указывать на тип int. Исключением является только указатель на тип void, в котором может содержаться произвольный адрес без указателя на тип данных. Однако по указателям этого типа нельзя ссылаться и получать значения.
Указатели и объекты в динамической памяти
Указатели используются для работы с динамической памятью (свободное хранилище, heap). Операции с данным видом памяти позволяют разрабатывать программы, способные обрабатывать большие объемы данных, чем это возможно без ее применения. Кроме того, динамическая память является более гибкой.
Предположим, что необходимо определить переменную типа double в динамической памяти. Для этого необходимо:
1. Определить указатель на тип double,
2. Запросить память для переменной типа double при помощи оператора new.
double *pa = 0;
pa = new double;
или double *pa = new double;
Можно сразу инициализировать переменную операцией new при ее создании:
double *pa = 0;
pa = new double(7.65);
илиdouble *pa = new double(7.65);
Когда отпадает необходимость в переменной, определенной динамически, следует:
1. Освободить память, на которую указывает pa, при помощи оператора delete,
2. Присвоить указателю нулевое значение или, если мы планируем его использовать далее, присвоить адрес новой переменной,
delete pa;
pa = 0;
или
delete pa;
pa = new double;