Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Pointer


мндэмс ©   (2006-10-31 18:50:00) 

Смотрю чужой исходник (сам только учусь, поинтеры ещё особо не читал), и заинтересовал такой вопрос:

Есть некоторый рекорд
PMyRecord = ^TMyRecord;
TMyRecord = record
 l1: Integer;
 l2: Integer;
end;


Потом где-то заполняют его и передают в другую функцию, при этом передают в функцию его, как поинтер.

var
 myRec: TMyRecord;
begin
 myRec.l1 := $000f;
 myRec.l2 := $000e;
 myProc(@myRec);
end;

procedure myProc(myRec: PMyRecord);
begin
....myRec^.l1 .....
end;


Какой смысл передавать в процедуру этот рекорд как поинтер? Почему не передать просто сам myRec?


Anatoly Podgoretsky   (2006-10-31 23:38:00) [1]

Ой у нас очень умный появился.


@!!ex   (2006-10-31 21:45:00) [2]


> мндэмс   (31.10.06 21:41) [10]

Лучше чем спрашивать, сначала пойти почитать книжки...
Или на крайня в гугле порыться.

Здесь никто не понтуется.
Просто пытаться делать выводы о работе какого то кода не понимая принципов, ИМХО не есть гуд. О чем вам уже и сказали.

Собственно по сабжу.
Подумай, что будет быстрее, выделить память под копию передаваемого рекорда и скоипировать туда данные или просто передать указатель на этот рекорд?
Особенно если размеры рекорда несколько десятков мегабайт......

Читай книжки.


мндэмс   (2006-10-31 21:41:00) [3]

Тем кто ответил - спасибо!

Абослютно не нравиться высказывания "что за лох, иди читай книжки, нам гуру программирования некогда на такие тупые вопросы отвечать". Лучше промолчать, в таких случаях.


Desdechado   (2006-10-31 20:51:00) [4]

> поинтеры ещё особо не читал
почитай, потом удивляйся чужим исходникам


Anatoly Podgoretsky   (2006-10-31 20:36:00) [5]

> MetalFan  (31.10.2006 20:32:07)  [7]

Да не стесняйся и нам весело, со временем холодов будет меньше. А будешь
молчать дураком помрешь и не догадаешься об этом.


MetalFan   (2006-10-31 20:32:00) [6]


> Anatoly Podgoretsky ©   (31.10.06 20:29) [6]


усе, молчу... ) а то еще ченить сморожу


Anatoly Podgoretsky   (2006-10-31 20:29:00) [7]

> MetalFan  (31.10.2006 20:26:05)  [5]

Если говорить в терминах Дельфи, то будет передан не указатель, а
типизированая ссылка, все ссылки являются указателями, но не все
типизированые.


MetalFan   (2006-10-31 20:26:00) [8]


> Anatoly Podgoretsky ©   (31.10.06 20:09) [4]
>
> > MetalFan  (31.10.2006 18:56:01)  [1]
>
> И будет передан тот же указатель.


ну да, я и не спорю)

> мндэмс   (31.10.06 19:01) [0]
> ....
> Какой смысл передавать в процедуру этот рекорд как поинтер?
>  Почему не передать просто сам myRec?
> мндэмс   (31.10.06 19:01) [2]
>
> А какой в этом смысл, только в том что бы передавать переменную
> как var?


почитай чтоли умные книжки, а?
если ее изменять не надо, то можешь хоть как const передавать


Anatoly Podgoretsky   (2006-10-31 20:09:00) [9]

> MetalFan  (31.10.2006 18:56:01)  [1]

И будет передан тот же указатель.


Palladin   (2006-10-31 19:13:00) [10]

да, скорее всего


мндэмс   (2006-10-31 19:01:00) [11]

А какой в этом смысл, только в том что бы передавать переменную как var?


MetalFan   (2006-10-31 18:56:00) [12]

можно и так
var
myRec: TMyRecord;
begin
myRec.l1 := $000f;
myRec.l2 := $000e;
myProc(myRec);
end;

procedure myProc(var myRec: TMyRecord);
begin
....myRec.l1 .....
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо