Основы программирования. Указатели. Динамические структуры данных. Абстрактные типы данных. Классы - 11 стр.

UptoLike

Составители: 

13
function NewInteger(i: integer): pinteger;
begin
New(Result);
Result^:=i;
end;
var pi: pinteger;
begin
pi:= NewInteger(5);
...
При своем вызове функция NewInteger возвращает указатель на динамическую
переменную, которая должна быть впоследствии освобождена. Основная пробле-
ма состоит в том, что NewInteger не является стандартной функцией, и при ее
вызове можно забыть, что она выделяет динамическую память. Один из способов
«напомнить» об
этом программистудать функции имя, свидетельствующее о ее
«создающей» способности. Например, имя такой функции может начинаться с
префикса New или Create.
Пример. Массив указателей на переменные разных типов.
В некоторых задачах возникает необходимость хранить в массиве данные
различных типов. Пусть в массиве требуется хранить данные типа integer,
real и shortstring.
Приведем вначале решение, не использубщее указатели.
Решение 1. Используем записи с вариантами. Опишем следующие типы:
type TVar=(tInt,tReal,tStr);
Variant = record
case t: TVar of
tInt: (i: integer);
tReal: (r: real);
tStr: (s: shortstring);
end;
Теперь опишем массив записей Variant и добавим в него несколько значений:
var A: array [1..10] of Variant;
begin
A[1].t:=tInt; A[1].i:=5;
A[2].t:=tReal; A[2].r:=3.14;
A[3].t:=tStr; A[3].s:='Delphi';
end.
Для вывода содержимого массива, очевидно, следует воспользоваться циклом
for i:=1 to 3 do
case A[i].t of
tInt: writeln(A[i].i);