![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамические массивы
Lexa11_2002 © (2006-03-22 13:05:00)Народ подскажите как на Pascal объявить динамический массив.
tesseract (2006-03-23 18:04:00) [1]Совсем просто:
type TdynArray:array[0..0] of TRecordType;
PdynArray=^TDynArray;
var
DynArray:PDynArray;
begin
{$R-} // без этого не заработает!!!!
Getmem(MyArray,needSize*sizeof(TrecordType));
///
FreeMem(MyArray,needSize*sizeOf(TrecordType));
{$R+}
можешь обращаться к массиву от 0 до needsize-1;
pascal требует от freemem указания объёма памяти, Delphi 2+ нет.
Впервые Зашел (2006-03-23 14:59:00) [2]Вижу, вопрос не разрешился...
В паскале все делается просто офигеть легче. :((
Где то так:
type
tip=real;
pvect=^vect; //указатель на вектор (строка)
vect=array[1..65520 div SizeOf(tip)] of tip;
pmatr=^matr;
matr=array[1..65520 div SizeOf(pvect)] of pvect; //массив указателей на строки (т.е. столбцы)
var Matrix:pmatr;
//
...........
//пишешь процедуру выделения памяти куда втюхиваешь следующую конструкцию
size:=longint(n*SizeOf(pvect)); // n - размер массива
GetMem(A,size);
for i:=1 to n do
begin
size:=longint(n*SizeOf(tip));
GetMem(A^[i],size)
end;
//т.е. при огранизации массива сначала узнаешь его размер
//
{Делаешь с массивом все что хочешь}
//
//и уничтожаешь
size:=longint(n*SizeOf(tip));
for i:=1 to n do FreeMem(A^[i],size);
size:=longint(n*SizeOf(pvect));
FreeMem(A,size);
Вот и все. Т.е. ты массив обьявляешь, но память под него не выделяется. Выделяется только тогда, когда он тебе понадобился и только такого размера какой тебе нужен!
Lexa11_2002 (2006-03-22 13:38:00) [3]Какой TList - я про Borland Pascal 7.0 говорю
nub (2006-03-22 13:37:00) [4]интересно а TList там есть? или тебе принципиально массив нужен, или еще и многомерный?
Lexa11_2002 (2006-03-22 13:34:00) [5]Не там как то при помощи процедуры делалось, без указателей ... там как то просто можно компилятор обмануть и вместо 10 ему N подсовывать, но как? ... сейчас просто придумать не могу
nub (2006-03-22 13:31:00) [6]наверна как в с - выделение памяти и указатели
Lexa11_2002 (2006-03-22 13:24:00) [7]Это в Delphi уже появились такие конструкции а в ВР еще нет там как то это по другому делалось ... сейчас просто очень вспомнить надо ... там просто еще как таковых динамических массивов еще не было, он не позволяет без [1..10] задать ... Полскажите как сделать так что б верхняя граница могла изменяться ...
nub (2006-03-22 13:19:00) [8]объяви SomeType ))
или ругается не паскаль, а надо задавать длину массива
SetLength(DinArray,length)
Lexa11_2002 (2006-03-22 13:18:00) [9]Pascal - ругает такую конструкцию, там как то по другому делается
Сергей М. (2006-03-22 13:11:00) [10]Например, так:
DinArray: array of SomeType;