Главная страница
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.095 c
15-1163052832
Layner
2006-11-09 09:13
2006.11.26
Привязка к MAC адресу, версии BOIS программы... за и против


2-1162985489
Lesorub
2006-11-08 14:31
2006.11.26
Помогите, плз, вопрос о типе TStrings


2-1162925307
kassel
2006-11-07 21:48
2006.11.26
Помогите с алгоритмом ил с прогой


15-1162916261
*Стажер*
2006-11-07 19:17
2006.11.26
Компьютер программиста, какой он?


3-1159354288
Василий Блаженный
2006-09-27 14:51
2006.11.26
dbExpress (MySQL)