Avatar billede hreiff Nybegynder
02. maj 2002 - 14:28 Der er 14 kommentarer og
2 løsninger

Dynamisk Array

Hvordan bruger man dynamiske arrays?

Jeg kender godt definitionen, f.eks:

var
  a: array of integer;

Men jeg får fejl på linjen ( [ expected - dvs. compileren forventer a: array[x..y] of integer.)

er der et flag man skal sætte, eller er det bare umuligt i Delphi 3  ??
Avatar billede borrisholt Novice
02. maj 2002 - 14:31 #1
dynamisk arrays er ikke lige muligt i Delphi 3 .. Men der findes et hack .. Det vil jeg gerne vise og en lille times tid .. Har lidt travlt pt.

Jens B
Avatar billede martinlind Nybegynder
02. maj 2002 - 14:33 #2
Kan du ikke bare bruge en TList i stedet for.
Avatar billede martinlind Nybegynder
02. maj 2002 - 14:35 #3
Den har en liste at Pointer, som du kan caste til Integer

MyInt := Integer(MyList[Cnt])

MyList.Add(Pointer(MyInt));
Avatar billede hreiff Nybegynder
02. maj 2002 - 14:48 #4
>> martinlind:

TList er absolut en mulighed - Det må også fungere med records i stedet for integer (det er faktisk det jeg skal bruge).

Jeg har desuden prøvet variant og sætte den til en array, men den tager ikke array of records.

Jeg ser lige Jens B´s hack hvis han kan finde det.
Avatar billede martinlind Nybegynder
02. maj 2002 - 14:54 #5
Du kan IKKE bruge delphi til openarrays i version 3, du kan lave noget windows MEM allokering, men en TList med Record's en klart det nemeste.

/Martin
Avatar billede borrisholt Novice
02. maj 2002 - 14:55 #6
Selvfølgelig kan man lave dynamiske arrays i D3 :

type
  THest = Integer;
  THesteArray = array[0..0] of THest;
  pHesteArray = ^THesteArray;

procedure TForm1.Button1Click(Sender: TObject);
var
  i : Integer;
  s : String;
  HesteArray : pHesteArray;
begin
  GetMem(HesteArray, 10 * Sizeof(THest));
  for i := 0 to  9 do
    THest(HesteArray^[i]) := I;
  s := '';

  for i := 0 to  9 do
    s := s + IntToStr(THest(HesteArray^[i])) + #32 + ',';
  ShowMessage(s);
  FreeMem(HesteArray);
end;


Jens B
Avatar billede martinlind Nybegynder
02. maj 2002 - 15:05 #7
JB >> Som du selvfølge bemærkede skrev jeg "OpenArrays" som er noget lidt andet, jeg mente at D3 ikke supporter dette, hvilket også er tilfældet, og mht. dit eks. så har du et problem når du gerne vil udvide dit array, så hvis du skal lave det manuelt, skal du bruge windows allokereing rutiner, for de kan udvide et allokeret område uden at slette indholdet, SÅ det må nok siges at være meget nemere med en TList, du slipper for en masse "house-keeping"

/Martin
Avatar billede borrisholt Novice
02. maj 2002 - 15:34 #8
jo jo sådan er det også med SetLength i D4+

Jesn B
Avatar billede martinlind Nybegynder
02. maj 2002 - 15:37 #9
Ja, men IKKE med GetMem()
Avatar billede borrisholt Novice
02. maj 2002 - 15:40 #10
Mit Heste hack er ligeså godt/dårligt som SetLength og Dynamiske Arrays i D4+

Jens B
Avatar billede martinlind Nybegynder
02. maj 2002 - 15:44 #11
Jeg har ikke erfaring med andet end OpenArrays og SetLength i D6, og der virker det fint, og når du udvider ( den husker indholdet )
Avatar billede borrisholt Novice
02. maj 2002 - 15:49 #12
OKI det er også noget nyt for d6 !

Jens B
Avatar billede borrisholt Novice
02. maj 2002 - 15:50 #13
Det kan man da bare kode til d3


Jens B
Avatar billede martinlind Nybegynder
02. maj 2002 - 15:53 #14
Ja da, man kan kode alt, men det er sku da nemere at bruge en TList
Avatar billede borrisholt Novice
02. maj 2002 - 15:55 #15
jammen så står der je ikke hest !

Og så bruger han ikke mit gamle hack !

:-)

Jens B
Avatar billede hreiff Nybegynder
02. maj 2002 - 16:21 #16
Ok, begge dele fungerer fint, så egentlig burde i jo have haft 15 point hver.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester