Для того, чтобы получить значение, которое находится по адресу, на который ссылается указатель, используется префикс *. Данная операция называется разыменованием указателя.

*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;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.