Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры программирование.doc
Скачиваний:
7
Добавлен:
17.04.2019
Размер:
257.54 Кб
Скачать
  1. Указатели и динамическое распределение памяти.

Указатель – это переменная, содержащая адрес другой переменной. Указатель представляет собой группу ячеек памяти, которые содержат адрес какой-либо переменной. Указатель на переменную объявляется следующим образом: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;