Форум: "Основная";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];
ВнизСоздание динамического массива Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c