Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
79
Добавлен:
15.06.2014
Размер:
211.97 Кб
Скачать

Указатель

динамическая переменная

Р:^Char;

Р:^Char;

 

Р^:=‘*’

Begin

 

 

 

 

 

 

 

 

new(p);

 

адрес

 

 

 

 

 

 

 

 

 

`*`

 

Р^:=`*`;

 

 

 

 

 

 

 

 

 

 

 

 

 

^ операция разыменования.

End;

Выделение и освобождение памяти New, Dispose, GetMem, FreeMem, во время работы программы.

Указательная переменная Р может быть в трех состояниях.

1. Содержать адрес какой – либо переменной, память под

 

которую уже выделена.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

P

P^

 

 

 

 

 

 

 

 

 

 

 

 

адрес

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.

Содержать специальный пустой

 

 

 

 

P

 

 

 

nil

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

адрес nil.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.

Находиться в неопределенном

 

 

P

 

?

 

 

 

 

 

 

 

 

 

 

 

 

 

состоянии.

 

?

 

 

 

 

 

 

Марченко А.И., Марченко Л.А. Программирование в среде TurboPASAL1 базовый

курс 7.0.-К.:ВЕК+,1999. – 464 с.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Действие

 

 

 

 

 

 

 

Результат

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1. Объявление

а

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

type Pint =^ integer;

b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

var a, b: Pint;

?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a^

 

 

2. Выделение

 

адрес1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

памяти

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b

 

адрес2

 

 

 

 

 

 

 

 

 

 

b^

 

 

New(a);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

New(b);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

 

 

 

 

 

 

 

 

 

 

 

 

a^

 

 

3. Занесение

 

 

адрес1

 

 

 

 

 

 

1

 

 

 

информации

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a^:=1;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b

 

адрес2

 

 

 

 

 

 

 

 

2

 

b^

 

 

b^:=2;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a

 

 

 

 

 

 

 

 

 

 

 

 

 

a^

 

 

 

 

4. Копирование

адрес1

 

1 2

 

 

a^=b^

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

информации

b

 

 

 

 

 

 

 

 

 

 

b^

a<>b

 

адрес2

2

 

 

 

 

 

a^:= b^;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

Действие

Результат

 

5.a) Копирование адреса a:=b

5. b) После освобождения памяти a:=b;

Dispose (a);

6. Присваивание пустого указателя b:= nil;

a

адрес2

2

 

a^=b^

 

 

 

a^

b

адрес2

2

a=b

b^

 

 

 

 

a

адрес2

 

b^

 

 

 

 

b адрес2 2

bnil

b^

Процедура New(A) выделяет память для указателя А Процедурой Dispose(A) освобождается область памяти

3

 

 

 

Сравнение статических и НЕСВЯЗНЫХ

 

 

 

ДИНАМИЧЕСКИХ ДАННЫХ

var

указатель

 

New Dispose

 

 

 

 

СТРУКТУРА ДАННЫХ ОБЫЧНЫЕ ПЕРЕМЕННЫЕ

ДИНАМИЧЕСКИЕ ПЕРЕМЕННЫЕ

 

 

 

 

 

 

1. Простая

type Tint =1..100;

type Tint =1..100;

 

var X: Char;

var PX: ^Char;

 

переменная

 

Y: Tint;

PY: ^Tint;

 

 

 

 

 

 

begin

begin

 

 

 

 

New(PX);

 

 

 

 

New(PY);

 

 

 

X:=`*`;

PX^:=`*`;

 

 

 

Y:=3;

PY^:=3;

 

 

 

 

 

 

 

Dispose (PX);

 

 

 

 

Dispose (PY);

 

 

 

end.

end.

 

 

 

 

 

 

 

 

 

 

4

2. Массив

3. Запись

type

Vect= array[1..3] of Byte; var X: Vect;

i: Byte; begin

for i:=1 to 3 do Read (X[i]); ….

end.

type Rec = record

A:Char;

B:Byte end;

var X: Rec; Begin

X.A:=`*`;

X.B:=7;

end.

type

Vect= array[1..3] of Byte; var PX: ^Vect;

i: Byte; begin

New(PX);

for i:=1 to 3 do Read (PX^[i]); ….

Dispose (PX);

end.

type Rec = record

A:Char;

B:Byte

end; var PX: ^Rec; begin

New(PX);

PX^.A :=`*`;

PX^.B :=7;

Dispose (PX); end.

Соседние файлы в папке 2семестр