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

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

Передача массива в процедуру в кач-ве var параметра.


id ©   (2006-10-16 17:33:00) 

Какие способы есть для передачи массива в процедуру?
Подскажите, пожалуйста.

PS. Интересует толкьо в виде var параметра. Т.е.:
procedure Add(var arr: array of string);


nikola232   (2006-10-17 13:47:00) [1]


> компилятор не дурак

Ты прав. Привычка, со свойствами на read write может и не прокатить.


> И причем тут перегрузка.


Непричем, я про

> массивы разных типов

имел ввиду.


Kolan   (2006-10-17 13:32:00) [2]


> то в каждом цикле будет выполняться функция High(arr)

Ты не прав, компилятор не дурак он вычислит однажды.

> все они описаны как глобальные.

Врядли это оправдано.


> Тогда пиши
> type
> TMyDynArray: Variant; //вариантный массив
>


... И причем тут перегрузка.


nikola232   (2006-10-17 13:27:00) [3]


> > надо где-нибудь до процедуры делать.
>
> это утверждение - личное убеждение или имеет какоето весомое
> основание?


Привычка, дело в том что я часто работаю с большими динамическими массивами, и все они описаны как глобальные.


> Зачем же все делать через pop?

а за тем что, если писать так
for i:=0 to High(arr)  do
............
,
то в каждом цикле будет выполняться функция High(arr)


nikola232   (2006-10-17 13:21:00) [4]


> которые будут принимать массивы разных типов.


Тогда пиши
type
TMyDynArray: Variant; //вариантный массив


Kolan   (2006-10-17 11:31:00) [5]


> С этим как быть?

overload; + F1


Сергей М.   (2006-10-17 10:32:00) [6]


> С этим как быть?


Именно так и быть - написать несколко перегруженных функций, которые будут принимать массивы разных типов.


id   (2006-10-17 10:11:00) [7]

Ещё проблема такая, что мне надо написать несколко перегруженных функций, которые будут принимать массивы разных типов.
С этим как быть?


Loginov Dmitry   (2006-10-16 20:48:00) [8]

nikola232 ©   (16.10.06 20:12) [9]
pop:=High(arr);


Зачем же все делать через pop?


Kolan   (2006-10-16 20:35:00) [9]


> > procedure Add(var arr: TMyDynArray);
>  var pop,i:integer;
> > begin
> >   pop:=High(arr);
>    for i:=0(1) to pop do
>    arr[i]:=Value;
> > end;


Бугога, че еще за поп?


Palladin   (2006-10-16 20:23:00) [10]


> надо где-нибудь до процедуры делать.

это утверждение - личное убеждение или имеет какоето весомое основание?


Kolan   (2006-10-16 20:17:00) [11]


> Это зачем? Setlength(arr, 150); надо где-нибудь до процедуры
> делать.

Даа, а если так:
function DoSmth: TMyDynArray
begin
 SetLEngth(Result, 10);
end;


Тут ты что предложишь?


nikola232   (2006-10-16 20:12:00) [12]


> type
> TMyDynArray: array of sometype;
> {...................................................}
> procedure Add(var arr: TMyDynArray);
> begin
>  Setlength(arr, 150);
> end;

Это зачем? Setlength(arr, 150); надо где-нибудь до процедуры делать.

Потом

> procedure Add(var arr: TMyDynArray);
 var pop,i:integer;
> begin
>  pop:=High(arr);
   for i:=0(1) to pop do
   arr[i]:=Value;
> end;

По моему цели эти преследуются?


Loginov Dmitry   (2006-10-16 19:41:00) [13]

Ketmar ©   (16.10.06 19:28) [7]
не всегда.


Но в 90% случаев так оно и есть.


Ketmar   (2006-10-16 19:28:00) [14]

>[5] Loginov Dmitry(c) 16-Oct-2006, 19:27
>Вместо array of string удобнее использовать TStrings
не всегда. %-)


umbra   (2006-10-16 19:27:00) [15]

type
TMyDynArray: array of sometype;
{...................................................}
procedure Add(var arr: TMyDynArray);
begin
 Setlength(arr, 150);
end;


Loginov Dmitry   (2006-10-16 19:27:00) [16]

id   (16.10.06 17:33)

Вместо array of string удобнее использовать TStrings (и без всяких var'ов)


id   (2006-10-16 17:40:00) [17]

У меня динамический массив.
Можено пример - как передать и как потом обращаться?
например, SetLength сделать для него.


umbra   (2006-10-16 17:39:00) [18]

2 Пользователь   (16.10.06 17:36) [1]

так лучше не делать

type
 TMyDynArray: array of sometype;
{...................................................}
procedure Add(var arr: TMyDynArray);


guav   (2006-10-16 17:39:00) [19]

Для статических и динамических массивов - два способа:
1. Как открытый массив
2. Используя тип массива

Для вариантных массивов - только второй способ - используя тип Variant/OleVariant


Пользователь   (2006-10-16 17:36:00) [20]

procedure Add(var arr: array of string);


Наверх

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