Avatar billede loke-liscom Nybegynder
16. december 2002 - 13:22 Der er 7 kommentarer og
3 løsninger

Pointer og pointerarray's

Hejsa igen...

Er der ikke en der kan fortælle noget om pointer's og pointerarray's. F.eks

type
  TBla : record
          b1 : integer;
          b2 : integer;
        end;
  PBla : ^TBla;

var
  Bla : PBla;

begin
  GetMem(Bla,SizeOf(TBla)*2); 
{Her har jeg allokeret hukommelse til at jeg kan have 2 opster i bla. Hvordan får jeg fat i dem?}
  FreeMem(Bla);
  Bla := nil;
{Gør jeg det overhovedet på den rigtige måde?}
end.

Det ville jo være optimalt hvis der var en der kunne referere til noget på nettet der beskriver det her....
Avatar billede hreiff Nybegynder
16. december 2002 - 13:55 #1
type
  TBla = record
          b1 : integer;
          b2 : integer;
        end;
  PBla = ^TBla;

procedure TForm1.Button1Click(Sender: TObject);
var
  Bla : PBla;

begin
  GetMem(Bla,SizeOf(TBla));

  Bla^.b1 := 1;
  Bla^.b2 := 3;

  label1.caption := inttostr(bla^.b2);

  FreeMem(Bla,SizeOf(TBla));
  Bla := nil;

end;
Avatar billede hreiff Nybegynder
16. december 2002 - 14:03 #2
Avatar billede loke-liscom Nybegynder
16. december 2002 - 14:29 #3
hej hreiff

Jeg har jo allokeret hukommelse nok til at jeg kan have 2 TBla liggende efter hinanden.
Avatar billede martinlind Nybegynder
16. december 2002 - 14:57 #4
Du kan læse om det i delphi's online hjælp.

Brug evt. en TList til at gemme dine allokerede pointere så du kan få fat i dem igen
Avatar billede loke-liscom Nybegynder
16. december 2002 - 14:59 #5
martinlind:

Prøv lige at se mit sidste spørgsmål.
Avatar billede hreiff Nybegynder
16. december 2002 - 15:11 #6
type
  TBla = record
          b1 : integer;
          b2 : integer;
        end;
  PBla = ^TBla;

procedure TForm1.Button1Click(Sender: TObject);
var
  Bla,bla2 : PBla;

begin
  GetMem(Bla,2*SizeOf(TBla));

  Bla2 := ptr(seg(bla^),Ofs(bla^)+sizeof(TBla));

  Bla^.b1 := 1;
  Bla^.b2 := 3;
  Bla2^.b1 := 2;
  Bla2^.b2 := 4;

  label1.caption := inttostr(bla2^.b2);

  FreeMem(Bla,2*SizeOf(TBla));
  Bla := nil;

end;
Avatar billede hreiff Nybegynder
16. december 2002 - 15:18 #7
type
  TBla = record
          b1 : integer;
          b2 : integer;
        end;
  PBla = ^TBla;

procedure TForm1.Button1Click(Sender: TObject);
var
  A: Array[0..3] of integer;
  i: integer;
  Bla : PBla;

begin
  for i:= 0 to 3 do
    a[i] := i+1;
  {så ligger der 1,2,3,4 i dit array}

  Bla := addr(a[0]);

  {Nu opfattes de to første tal i dit array som en record}
  {dvs. Bla^b1 = 1 og Bla^b2 = 2}

  label1.caption := inttostr(bla^.b2);

  Bla := ptr(seg(bla^),Ofs(bla^)+sizeof(TBla));

  {Nu opfattes de to sidste tal i dit array som en record}
  {dvs. Bla^b1 = 3 og Bla^b2 = 4}


  label2.caption := inttostr(bla^.b2);

end;
Avatar billede loke-liscom Nybegynder
16. december 2002 - 16:14 #8
Sorry, jeg fandt selv løsningen...

bla^.b1 :=
bla^.b2 :=
Inc(Bla)
bla^.b1 :=
bla^.b2 :=
Avatar billede hreiff Nybegynder
16. december 2002 - 16:49 #9
Der kan man bare se. Det vidste jeg sgu ikke at man kunne. Smart.
Avatar billede loke-liscom Nybegynder
17. december 2002 - 08:17 #10
Jeg vidste det egentligt godt, jeg kunne bar ikke huske det... :-)

//klaus
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