![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамические массивы как параметры [D6, Win2k]
Turalyon © (2002-03-14 10:00:00)Приветствую всех!
У меня такой вопрос "общего назначения". Можно ли передавать процедурам в качестве параметров динамические массивы, и на сколько это корректно... Учитывая то, что эти процедуры будут его изменять (и размеры и значения)...
lipskiy (2002-03-14 23:38:00) [1]Я не прав?
lipskiy (2002-03-14 14:37:00) [2]Случалось вроде, что (по типу)
procedure DoSomething(LArr: TLAarr);
проходит, а вот
procedure DoSomething(var LArr: TLAarr);
не проходит :(
Alx2 (2002-03-14 10:50:00) [3]Открытый массив в параметрах, значит, грубо говоря, статический (хотя и не известна заранее его размерность).
Виктор Щербаков (2002-03-14 10:46:00) [4]Правильно будет так:
type TLArr: Array of MyType;
procedure MyProc;
var LArr : TLArr
begin
DoSomething(LArr);
end;
...
procedure DoSomething(LArr: TLAarr);
var k : integer;
begin
...
SetLength(LArr,k);
...
end;
Turalyon (2002-03-14 10:43:00) [5]Просвети пожалуйста Виктор, а в чем разница? Я так понял, что нельзя изменять размер переменных передаваемых в процедуры?
Виктор Щербаков (2002-03-14 10:31:00) [6]Типы действительно не совместимые, ты путаешь динамические и открытые массивы. Я ведь не зря пример привел.
Turalyon (2002-03-14 10:18:00) [7]Сейчас попробывал сделать вот такую штуку...
procedure MyProc;
var LArr : Array of MyType;
begin
DoSomething(LArr);
end;
...
procedure DoSomething(var LArr : Array of MyType);
var k : integer;
begin
...
SetLength(LArr,k);
...
end;
Ругается говорить несовместимые типы.... Если массив вынести в глобальные переменные, то все работает.
Виктор Щербаков (2002-03-14 10:07:00) [8]Передавать в функции можно, ведь Borland говорит, что
Dynamic-array variables are implicitly pointers and are managed by the same reference-counting technique used for long strings.
И даже приводит пример:
type TDynamicCharArray = array of Char;
function Find(A: TDynamicCharArray): Integer;