Форум: "Основная";
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];
ВнизДрузья, подскажите для чего нужны указатели, на простом примере Найти похожие ветки
← →
AFROLOV (2002-04-03 13:28) [2]Указатели полезны во многих ситуациях.
1. При работе с памятью.
2. При работе с большими объектами.
(Простой пример: перестановка 2 объектов, позволяет делать эту операцию очень быстро)
Type
MyRecord=record
a:integer;
b:integer;
c:real;
end;
procedure proc1();
Var
P1,P2,P3:^MyRecord;
begin
GetMem(P1,sizeOf(MyRecord));//Выделяем память под записи
GetMem(P2,sizeOf(MyRecord));
P3:=P1;
P1:=P2;//2 указателя указывают на объект 2
P2:=P3;//Теперь P1 указывает на объект 2 а P2 на объект 1
FreeMem(P1,sizeOf(MyRecord));//Удаляем записи из памяти
FreeMem(P2,sizeOf(MyRecord));
end;
Без применения указателей:
Type
MyRecord=record
a:integer;
b:integer;
c:real;
end;
procedure proc1();
Var
P1,P2,P3:^MyRecord;
begin
GetMem(P1,sizeOf(MyRecord));//Выделяем память под записи
GetMem(P2,sizeOf(MyRecord));
GetMem(P3,sizeOf(MyRecord));
P3^.a:=P1^.a;
P3^.b:=P1^.b;
P3^.c:=P1^.c;
P1^.a:=P2^.a;
P1^.b:=P2^.b;
P1^.c:=P2^.c;
P2^.a:=P3^.a;
P2^.b:=P3^.b;
P2^.c:=P3^.c;
FreeMem(P1,sizeOf(MyRecord));//Удаляем записи из памяти
FreeMem(P2,sizeOf(MyRecord));
FreeMem(P3,sizeOf(MyRecord));
end;
Приемущества указателей в данном примере следующие:
1. Более компактный код
2. Более быстрый код (вместо 9 присваиваний 3 и это на совсем небольшой записи)
3. Не требуется выделения дополнительной памяти.
4. Код с указателями при изменении типа MyRecord изменять не нужно.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.005 c