Динамические переменные


Динамические переменные. Одномерные динамические массивы

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

В языке С++ существует и другой способ выделения памяти для данных – во время выполнения программы. Такие данные (переменные, массивы) называются динамическими, они создаются по требованию программы и запоминаются в блоках памяти переменного размера, принадлежащих специальным образом организованной области памяти – так называемой ”куче.

Динамические переменные

В С++ наиболее распространённым способом создания динамической переменной является использование операции new и указателя:

переменная-указатель = new тип_переменной;

Операция new выделяет область памяти в куче для хранения значения заданного типа и возвращает адрес начала выделенной памяти, который присваивается переменной-указателю, например:

int * p = new int;

При выполнении этого оператора создаётся динамическая переменная целого типа, адрес которой присваивается указателю p.

С помощью операции new можно выделить память в куче для значений переменных любого допустимого типа.

Если свободной памяти в куче для создания новой переменной оказалось недостаточно, операция new возвращает нулевое значение (0 или NULL). Поэтому программа должна проверять успешность создания динамической переменной:

if(p == NULL){ // или if(!p)

cout<<”Error: no memory”<<endl;

exit(1);

}

При создании динамической переменной допускается сразу присвоить ей значение (проинициализировать):

int * p = new int(5);

В результате выполнения данного оператора переменной, адресуемой указателем p, будет присвоено значение 5.

После выделения области памяти и присваивания её адреса указателю можно разыменовать этот указатель и использовать память, как если бы она принадлежала статической переменной.

После того как необходимость в использовании динамической переменной отпала, занимаемую её память следует освободить. Это можно сделать с помощью операции delete:

delete переменная-указатель;

Операция delete не требует указывать размер освобождаемой памяти, так как в С++ существует специальный механизм, позволяющий автоматически связывать с указателем размер области памяти, на которую он указывает.

Пример. Использование операций new,delete.

int *p = new int; // выделение памяти для int- значения

*p = 20; // занесение в эту память значения 20

cout<<*p<<endl; // вывод20 на экран

delete p; // освобождение памяти

Переменные, созданные с помощью операции new, называются динамическими переменными, потому что они создаются и уничтожаются в процессе выполнения программы. Динамические переменные размещаются в кучединамической памяти. Для доступа к таким переменным используются только указатели (косвенная адресация), так как ячейкам динамической памяти нельзя присвоить имя. Занимаемая переменной память в куче освобождается с помощью операции delete.



Дата добавления: 2022-05-27; просмотров: 70;


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

Воспользовавшись поиском можно найти нужную информацию на сайте.

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

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.009 сек.