Форум: "Основная";
Текущий архив: 2006.11.26;
Скачать: [xml.tar.bz2];
ВнизПередача массива в процедуру в кач-ве 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.042 c