АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Управление динамической памятью

Читайте также:
  1. I. Способы, связанные с управлением дыханием
  2. II. Управление. (Выявление морфемных аграмматизмов)
  3. VII. ИСТОЧНИКИ ФОРМИРОВАНИЯ ИМУЩЕСТВА ОРГАНИЗАЦИИ. УПРАВЛЕНИЕ ИМУЩЕСТВОМ ОРГАНИЗАЦИИ
  4. VIII Экономика и управление
  5. Автоматическое управление движением с помощью конечных выключателей, пример.
  6. Автономное управление
  7. АСУ ТП и диспетчерское управление
  8. АСУ ТП и диспетчерское управление
  9. Власть и социальное управление?
  10. Влияние национальных культур и языковых различий на управление человеческими ресурсами.
  11. Вопрос № 18 «Государственное управление в эпоху дворцовых переворотов»
  12. Вопрос № 45 «Гос управление на современном этапе. Разрушение советской системы гос власти»

Мы рассматривали указатели, содержащие адреса статических переменных. Переменной, на которую указывает указатель, не обязательно присваивать какое-либо имя. К ней можно обращаться через имя указателя. В этом и заключается основное назначение указателей – адресация так называемых динамических переменных.

При объявлении данных динамической структуры в разделе описаний указывается не сама переменная какого-либо типа, а указатель (ссылка) на нее. В результате указатель будет обычной переменной, а переменная, на которую он указывает – динамической.

 
 

 


Такие переменные располагаются в свободной области, называемой динамической памятью или «кучей». Эта область расположена после программы, и ее объем составляет около 200…500 КБ (зависит от процессора), чем больше объем программы, тем меньше размер свободной области памяти.

 

Чтобы воспользоваться этой динамической областью памяти, необходимо сначала зарезервировать фрагмент этой области и запомнить ее адрес с помощью процедуры/функции New:

1. Процедура New (var p:pointer); - возвращает адрес выделенного участка памяти через параметр-переменную. Размер участка памяти определяется базовым типом указателя.

 

VAR pi:^integer;

New(pi);

Readln(pi^);

Pi^:=Pi^+1;

 

2. процедура Dispose (var p:pointer ) – освобождает память по адресу, хранящемуся в указателе.

Dispose(p);……

Пример 4

Реализовать «безразмерный» массив целых чисел, длина массива задается с клавиатуры.

Опишем массив из двух элементов. Выделим память под этот массив (new(t)). Перемещая указатель на второй элемент массива (t:=@t^[2]), мы «удлиняем» массив на 1 элемент.

t

     

 


Type Mas=array[1..2]of integer;

Uk_Mas=^Mas;

 

Var t,beg:Uk_Mas;

i,n:integer;

 

procedure vivod(var beg:Uk_Mas;n:integer);

var p:Uk_Mas;

begin

p:=beg;

for i:=1 to n do

begin

write(p^[1]:4);

p:=@p^[2];

end;

end;

 

Begin

new(t); beg:=t;

readln(n);

for i:=1 to n do

begin

write('Введите целое число: ');

readln(t^[1]);

t:=@t^[2];

end;

writeln('Вывод массива:');

vivod(beg,n);

readln

end.

 

Упражнения

Задание 1

Вывести значение элемента по заданному порядковому номеру элемента.

 

Задание 2

Написать программу, вычисляющую сумму матрицы вещественных чисел, имеющую большую размерность (n,m≤10 000).


1 | 2 |

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



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)