![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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;