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

Вниз

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

 
Lexa11_2002   (2006-03-22 13:05) [0]

Народ подскажите как на Pascal  объявить динамический массив.


 
Сергей М. ©   (2006-03-22 13:11) [1]

Например, так:

DinArray: array of SomeType;


 
Lexa11_2002   (2006-03-22 13:18) [2]

Pascal - ругает такую конструкцию, там как то по другому делается


 
nub ©   (2006-03-22 13:19) [3]

объяви SomeType ))

или ругается не паскаль, а надо задавать длину массива
SetLength(DinArray,length)


 
Lexa11_2002   (2006-03-22 13:24) [4]

Это в Delphi уже появились такие конструкции а в ВР еще нет там как то это по другому делалось ... сейчас просто очень вспомнить надо ... там просто еще как таковых динамических массивов еще не было, он не позволяет без [1..10] задать ... Полскажите как сделать так что б верхняя граница могла изменяться ...


 
nub ©   (2006-03-22 13:31) [5]

наверна как в с - выделение памяти и указатели


 
Lexa11_2002   (2006-03-22 13:34) [6]

Не там как то при помощи процедуры делалось, без указателей ... там как то просто можно компилятор обмануть и вместо 10 ему N подсовывать, но как? ...  сейчас просто придумать не могу


 
nub ©   (2006-03-22 13:37) [7]

интересно а TList там есть? или тебе принципиально массив нужен, или еще и многомерный?


 
Lexa11_2002   (2006-03-22 13:38) [8]

Какой TList - я про Borland Pascal 7.0 говорю


 
Впервые Зашел   (2006-03-23 14:59) [9]

Вижу, вопрос не разрешился...
В паскале все делается просто офигеть легче. :((

Где то так:
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);

Вот и все. Т.е. ты массив обьявляешь, но память под него не выделяется. Выделяется только тогда, когда он тебе понадобился и только такого размера какой тебе нужен!


 
tesseract ©   (2006-03-23 18:04) [10]

Совсем просто:

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+ нет.



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

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

Наверх




Память: 0.49 MB
Время: 0.031 c
15-1142449191
TStas
2006-03-15 21:59
2006.04.09
Как устроен клавиатурный шпион?


1-1141390616
rolex
2006-03-03 15:56
2006.04.09
У некоторых текст отображается в виде ??? (вопросительных знаков)


8-1129797644
dizard
2005-10-20 12:40
2006.04.09
Проблема с увеличением графических фигур


2-1142964079
Quattro
2006-03-21 21:01
2006.04.09
Окно-заставка


15-1142962553
Dust
2006-03-21 20:35
2006.04.09
Диалог выбора паки