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

Вниз

Динамические массивы как параметры   Найти похожие ветки 

 
Turalyon ©   (2002-03-14 10:00) [0]

Приветствую всех!
У меня такой вопрос "общего назначения". Можно ли передавать процедурам в качестве параметров динамические массивы, и на сколько это корректно... Учитывая то, что эти процедуры будут его изменять (и размеры и значения)...


 
Виктор Щербаков ©   (2002-03-14 10:07) [1]

Передавать в функции можно, ведь 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;


 
Turalyon ©   (2002-03-14 10:18) [2]

Сейчас попробывал сделать вот такую штуку...


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:31) [3]

Типы действительно не совместимые, ты путаешь динамические и открытые массивы. Я ведь не зря пример привел.


 
Turalyon ©   (2002-03-14 10:43) [4]

Просвети пожалуйста Виктор, а в чем разница? Я так понял, что нельзя изменять размер переменных передаваемых в процедуры?


 
Виктор Щербаков ©   (2002-03-14 10:46) [5]

Правильно будет так:

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;


 
Alx2 ©   (2002-03-14 10:50) [6]

Открытый массив в параметрах, значит, грубо говоря, статический (хотя и не известна заранее его размерность).


 
lipskiy ©   (2002-03-14 14:37) [7]

Случалось вроде, что (по типу)
procedure DoSomething(LArr: TLAarr);
проходит, а вот
procedure DoSomething(var LArr: TLAarr);
не проходит :(


 
lipskiy ©   (2002-03-14 23:38) [8]

Я не прав?



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

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

Наверх




Память: 0.48 MB
Время: 0.009 c
1-90831
AndreyS
2002-03-14 15:34
2002.03.28
Вопрос по приорететам и компилятору.


1-90878
JustMan
2002-03-17 15:20
2002.03.28
Как узнать в какой папке находится Windows?


3-90752
AndrewK
2002-02-27 16:06
2002.03.28
Как править записи в DBGrib?


1-90868
Juckser
2002-03-05 20:53
2002.03.28
Как сделать, чтобы при открытии Wave-файла запускалась моя программа, и MediaPlayer в ней, воспроизвел этот файл?


4-91102
Mirovodin
2002-01-28 12:38
2002.03.28
Таблица импорта