Динамическая переменная (программирование)

Динами́ческая переме́нная — переменная в программе, место в оперативной памяти под которую выделяется во время выполнения программы. По сути, она является участком памяти, выделенным системой программе для конкретных целей во время работы программы. Этим она отличается от глобальной статической переменной - участка памяти, выделенного системой программе для конкретных целей перед началом работы программы. Динамическая переменная — один из классов памяти переменной.

Так как динамическая переменная создаётся во время выполнения программы, во многих языках программирования у неё нет собственного идентификатора. Работа с динамической переменной ведётся косвенно, через указатель. Создание такой переменной заключается в выделении участка памяти с помощью специальной функции. Эта функция возвращает адрес в памяти, который назначается указателю. Процесс доступа к памяти через указатель называется разыменованием. После окончания работы с динамической переменной выделенную под неё память необходимо освободить — для этого тоже есть специальная функция.

Пример создания динамической переменной с помощью указателя в языке Pascal:

type tMyArray =  array [1..3] of real;
var pMyArray = ^tMyArray;
begin
  new (pMyArray);    {выделение памяти под массив из трех чисел}
  pMyArray^[1] := 1.23456;
  pMyArray^[2] := 2.71828;
  pMyArray^[3] := 3.14159;
  ......

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

Пример создания динамического массива в языке Delphi:

var MyArray = array of real;
begin
  SetLength(MyArray,3);   {выделение памяти под массив из трех чисел}
  MyArray[0] := 1.23456;  {в Delphi динамические массивы нумеруются в си-образном стиле: от 0 до n-1}
  MyArray[1] := 2.71828;
  MyArray[2] := 3.14159;
  ......

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