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

Вниз

Создание динамического массива   Найти похожие ветки 

 
Armageddon ©   (2002-12-27 17:55) [0]

Раскажите пожалуйста, как создать динамический массив и как с ним работать.(Я знаю, что в Delphi он уже есть, но мне именно нужен свой).


 
Cu ©   (2002-12-27 18:01) [1]

array of [type]

for example :
a: array of integer;

SetLength (a, 5);

a [0] := ...;
...
a [4] := ...;
....
Finalize (a);

что -то типа того...


 
gsu ©   (2002-12-27 18:03) [2]

Что значит есть и нужен свой, это ж не компонент
1. объявляешь: a: array of TТвойТипДанных
2. Выделяешь под него память SetLenght(a, Твоя длина)
3. Работаешь с ним
4 Удаляешь его SetLenght(a,0) или a:=nil


 
Roma ©   (2002-12-27 18:58) [3]

Armageddon © (27.12.02 17:55)

Можешь попробовать вариантные массивы, создание - VarArrayCreate, остальные функции смотри в "See also" к VarArrayCreate...


 
OxOTHuK   (2002-12-27 22:21) [4]

а FINALIZE обязательно??


 
Kotka ©   (2002-12-27 22:58) [5]

a: array of integer;-это одномерный массив

a: array of array of integer;-а так двумерный
SetLength(a,5,2);


 
Armageddon ©   (2002-12-28 01:08) [6]

Всем большое спасибо. Вы мне очень помогли. В продолжении темы, а как создать массив на немного более низком уровне. Есть команды new(P1); b т.д. Я не могу понять, как сделать так, чтобы создать трубуемое кол-во (как изм P1). А потом как ссылаться .
Всем зарание благодарен.


 
Armageddon ©   (2002-12-28 14:01) [7]

Че никто не знает???


 
gsu ©   (2002-12-28 14:11) [8]

New(var P: Pointer) - динамически выделяет память, размер которой определяется типом типизированного указателя P, и возвращает P адрес выделенной области памяти. Отсюда и пляши.


 
Armageddon ©   (2002-12-28 15:22) [9]

gsu спасибо конечно, но проблема в другом, как изменять P
тоесть мне необходимо создать P1,p2,p3,p4 ... P10000000000000000.
Вот в чем проблема, не буду же я их вручную перечислять


 
KSergey ©   (2002-12-28 20:17) [10]

Тогда при чем тут "нижний" уровень? Создавайт нормальный динамическй массив p[1..10000000000000000] -и все.
Только не спрашивайте, почему массив такого размера не создается - он просто не лезет в память. Используйте другие средства (если вы перечислине их через new - проблему это не решит)


 
Fantasist ©   (2002-12-28 20:23) [11]

Эх, по видимому, что запостенно в этом форуме более месяца назад теряется безвозвратно.

Например:

TDynArray=class
private
mData:pointer;

function Get(Index:integer):Integer;
begin
Result:=PInteger(Cardinal(mData)+Index*SizeOf(Integer))^;
end;

procedure Set(Index:Integer;Value:Integer)
begin
PInteger(Cardinal(mData)+Index*SizeOf(Integer))^:=Value;
end;
public
constructor Create(Size:integer)
begin
GetMem(mData,*SizeOf(Integer));
end;
destructor Destroy; override;
begin
FreeMem(mData);
end;
public
property Items[Index:integer]:Integer read Get write Set; default;
end;


Дальше - ваша фантазия. Расширять, улучшать можно много.


 
PVOzerski ©   (2002-12-28 20:37) [12]

Есть очень полезная RTL-функция ReallocMem. В сочетании с GetMem идеально подходит, когда "штатных" динамических массивов нет (напр., в D2-3).

type
tx=array[1..1] of integer;
var
x:^tx;
i:integer;
begin
Getmem(x,100*sizeof(x[1]));
for i:=1 to 100 do
x[i]:=i;
ReallocMem(x,200*sizeof(x[1]));
for i:=101 to 200 do
x[i]:=-i;
ReallocMem(x,0);
end.



 
TTCustomDelphiMaster ©   (2002-12-28 20:37) [13]

MyType = record
...
end;
PMyType = ^MyType

var
a: array of PMyType;
...

SetLength(a, 100);
New(a[1]);
...
Dispose(a[1]);



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

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

Наверх




Память: 0.49 MB
Время: 0.012 c
14-37331
SCORPIOMAX
2002-12-23 20:40
2003.01.13
Только для профи объектно-ориентированного программирования


1-37191
Anatoliy P
2002-12-30 17:47
2003.01.13
Динамическая форма


6-37247
Cr@sh
2002-11-13 18:09
2003.01.13
Научите, как пользоваться NMSMTP


3-36976
qwerty
2002-12-17 00:30
2003.01.13
Длинные текстовые поля в гриде


4-37460
Алёшка1900
2002-11-25 22:01
2003.01.13
GetAsyncKeyState(VK_LBUTTON)