Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-46457
@andrew
2002-04-03 11:36
2002.04.15
ПРИВЕТ ВСЕМ! Как создать форму внутрях DLL - все ясно,


1-46432
Иван
2002-04-02 21:51
2002.04.15
отправка email


1-46340
Muzzy
2002-04-04 09:33
2002.04.15
Цвета в столбцах TStringGird


6-46460
Diablo
2002-01-31 17:10
2002.04.15
вопрос по UDP


1-46424
Zeerov
2002-04-02 16:59
2002.04.15
Помогите новичку





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский