Для того, чтобы получить значение, которое находится по адресу, на который ссылается указатель, используется префикс *. Данная операция называется разыменованием указателя.
*a = 10;
int main(int argc, char* argv[ ]) {
int var = 123; // инициализация переменной var числом 123
int *ptrvar = &var; // инициализация указателя:
// присвоили адрес переменной var)
int *a = new int; // Объявление указателя для переменной типа int int *b = new int(5); // Инициализация указателя для массива int
*a = 10;
…
Если распечатать значения переменных, то получим, примерно, следующее:
&var = 0x22ff08
ptrvar = 0x22ff08
var = 123
*ptrvar = 123
Для того, чтобы освободить память, выделенную оператором new, используется оператор delete:
delete a; delete b;
В основном указатели используются для организации динамического распределения памяти.
Например, если размер массива заранее неизвестен (количество элементов вводится пользователем в процессе выполнения программы), используется динамическое выделение памяти под массив.
Для использования функций динамического выделения памяти необходимо описать указатель, представляющий собой начальный адрес хранения элементов массива.
Int *p; // указатель на тип int
Начальный адрес статического массива определяется компилятором в момент его объявления и не может быть изменен.
Для динамического массива начальный адрес присваивается объявленному указателю на массив в процессе выполнения программы.
Функции динамического выделения памяти находят в оперативной памяти непрерывный участок требуемой длины и возвращают начальный адрес этого участка.
Стандартные функции динамического распределения памяти:
void* malloc(РазмерМассиваВБайтах);
void* calloc(ЧислоЭлементов, РазмерЭлементаВБайтах);
Для использования функций динамического распределения памяти необходимо подключение библиотеки <malloc.h>:
#include <malloc.h>
Поскольку обе представленные функции в качестве возвращаемого значения имеют указатель на пустой тип void, требуется явное приведение типа возвращаемого значения.
Для определения размера массива в байтах, используемого в качестве аргумента функции malloc() требуется количество элементов умножить на размер одного элемента. Поскольку элементами массива могут быть как данные простых типов, так и составных типов (например, структуры), для точного определения размера элемента в общем случае рекомендуется использование функции
int sizeof(тип);
Которая определяет количество байт, занимаемое элементом указанного типа.
Память, динамически выделенная с использованием функций calloc(), malloc(), может быть освобождена с использованием функции
free(указатель);
Quot;Правилом хорошего тона" в программировании является освобождение динамически выделенной памяти в случае отсутствия ее дальнейшего использования. Однако если динамически выделенная память не освобождается явным образом, она будет освобождена по завершении выполнения программы.
Вывод: В С/C++ программист может получить доступ к адресам переменных и блокам памяти компьютера через указатели. Эта возможность предусмотрена, т.к. язык Си является языком разработки операционных систем.
Дата добавления: 2016-01-18; просмотров: 808;