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

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

Как передать параметром массив переменной длины


noob_one ©   (2008-10-10 13:53:00) 

без создания переменной этого типа?

В процедуру надо передавать массив структур вида (целое, строка, вещественное)?

пока реализовано так

 param=record
       Vnum:integer;
       Fname:string;
       mult:Double;
      end;

procedure proc(const par: array of param);
begin ... end;

var p1: array of param;

begin
SetLength(p1,1);
p1[0].Vnum:=1;
p1[0].fname:='test';
p1[0].mult:=1.2;

proc(p1);



Есть какой нибудь способ передавать такие массивы без явного создания переменных для передачи?

Что-нибудь типа такого?


begin
...
proc( ((1,'test',1.2)) );
...
   


Renegat   (2008-10-10 15:50:00) [1]

> [7] noob_one   (10.10.08 15:46)

Разворачивание "коротких" циклов - вещь очень полезная в плане оптимизации по скорости.
Хотя нет, у нас же тут Делфи... =)


noob_one   (2008-10-10 15:46:00) [2]


> oldman

А вы любите писать пустой код? Может вы еще и циклы раскрываете?


oldman   (2008-10-10 14:52:00) [3]


> noob_one   (10.10.08 14:10) [2]
> сравните
> ...
> вызывать надо часто. Возиться не хочется.


Здравствуйте, Лентяй!


noob_one   (2008-10-10 14:36:00) [4]

Спасибо :)


sniknik   (2008-10-10 14:27:00) [5]

> пока реализовано так

param=record
      Vnum:integer;
      Fname:string;
      mult:Double;
     end;

function p(vVnum: integer; const vFname: string; vMult: Double): param;
 begin
   with result do begin
     Vnum := vVnum ;
     Fname:= vFname;
     mult := vMult;
   end;
 end;

procedure proc(const par: array of param);
begin ... end;

proc([p(1,'test',1.2),p(2,'test1',0.8),p(4,'test2',1.3),p(5,'test5',1.5)]);


MBo   (2008-10-10 14:25:00) [6]

напиши функцию, создающую переменную типа param из составляющих (подобно функции Point), и ее можно будет использовать в конструкторе открытого массива


noob_one   (2008-10-10 14:10:00) [7]

сравните

SetLength(p1,4);
p1[0].Vnum:=1;
p1[0].fname:='test';
p1[0].mult:=1.2;
p1[1].Vnum:=2;
p1[1].fname:='test1';
p1[1].mult:=0.8;
p1[2].Vnum:=4;
p1[2].fname:='test2';
p1[2].mult:=1.3;
p1[3].Vnum:=5;
p1[3].fname:='test5';
p1[3].mult:=1.5;


и

proc( ((1,'test',1.2),(2,'test1',0.8),(4,'test2',1.3),(5,'test5',1.5))  );

размер может быть до 10 и вызывать надо часто. Возиться не хочется.


Правильный$Вася   (2008-10-10 14:01:00) [8]

а что, жалко 4 байта под переменную?


Наверх

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