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