Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.26;
Скачать: CL | DM;

Вниз

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

 
id   (2006-10-16 17:33) [0]

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

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


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

procedure Add(var arr: array of string);


 
guav ©   (2006-10-16 17:39) [2]

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

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


 
umbra ©   (2006-10-16 17:39) [3]

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

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

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


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

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


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

id   (16.10.06 17:33)

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


 
umbra ©   (2006-10-16 19:27) [6]

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


 
Ketmar ©   (2006-10-16 19:28) [7]

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


 
Loginov Dmitry ©   (2006-10-16 19:41) [8]

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


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


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


> 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;

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


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


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

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


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


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


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

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


 
Kolan ©   (2006-10-16 20:35) [12]


> > 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 20:48) [13]

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


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


 
id ©   (2006-10-17 10:11) [14]

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


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


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


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


 
Kolan ©   (2006-10-17 11:31) [16]


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

overload; + F1


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


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


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


 
nikola232 ©   (2006-10-17 13:27) [18]


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


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


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

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


 
Kolan ©   (2006-10-17 13:32) [19]


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

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

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

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


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


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


 
nikola232 ©   (2006-10-17 13:47) [20]


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

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


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


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

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

имел ввиду.



Страницы: 1 вся ветка

Текущий архив: 2006.11.26;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.047 c
2-1162923096
koha
2006-11-07 21:11
2006.11.26
Хоть в какой-нибудь версии Delphi есть переведенная справка?


15-1163131418
Slider007
2006-11-10 07:03
2006.11.26
С днем рождения ! 10 ноября


3-1158829288
vodvorezlaya
2006-09-21 13:01
2006.11.26
Как проверить колличество одинаковых записей в поле


3-1158849383
evgenij_
2006-09-21 18:36
2006.11.26
Rave Report+Access


15-1162673233
ProgRAMmer Dimonych
2006-11-04 23:47
2006.11.26
Дайте адреса дл FTP-серверов