Avatar billede screwdriver Nybegynder
05. april 2004 - 18:42 Der er 5 kommentarer og
1 løsning

Pointer til dyn array

Hej

Jeg vil gerne lave en pointer til et statisk array, således at jeg kan kalde en procedure med denne pointer, og det så kun er værdierne fra nummer 2 til f.eks. 5 der er i arrayet. Jeg har prøvet med dette eksempel

procedure TForm1.Button1Click(Sender: TObject);
Var
  a : Array [0..5] of Byte ;
  b : Array of byte ;

begin
  a[0] := 97 ;
  a[1] := 98 ;
  a[2] := 99 ;
  a[3] := 100 ;
  a[4] := 101 ;
  a[5] := 102 ;

//  B := @a[3] ;
  B := Addr(a[2]) ;
  Setlength ( b, 4 ) ;
  TestArray ( b ) ;
end;

procedure TForm1.TestArray ( TestData: array of byte );
var
  s : String ;
  i : Integer ;
begin
  s := '' ;
  for i := 0 to 3 do
    s := s + IntToStr ( TestData [i] ) + ' '  ;
  Edit1.Text := s ;
end ;

Når jeg bruger:
  Setlength ( b, 4 ) ;
efter
  B := Addr(a[2]) ;
får b en ny adresse, og jeg kan ikke regne med at data er de rigtige.
Bruger jeg den før, er data rigtige, men jeg får en acces violation når jeg bruger dem i funktionen

Håber I kan hjælpe :-)
Avatar billede borrisholt Novice
06. april 2004 - 09:24 #1
For det først så ændere du ikke i dit Array i din procedure, så stop et const foran

Altså : procedure TForm1.TestArray ( const TestData: array of byte );

ellers kopierer Delphi dit array inden det kommer til din procedure, det er der ingen grund til.

Så er der den me pointeren .. Jooo et array er forløbende nummeret i hukommelsen, så ledes at har du adressen på det første element er det bolt at beregne et Offset ud fra det første element (Placering * Størelsen på dit element)

i dit tilfælde :

var
  p : pByte;
begin
  p := @a[0]; // HVIS 0 er det første element
end;

i et dynamisk array er 0 ALTID den første placering

Jens B
Avatar billede screwdriver Nybegynder
06. april 2004 - 12:31 #2
tusind tak :-)

Jeg manglede lige det const der ...
Avatar billede screwdriver Nybegynder
06. april 2004 - 12:32 #3
Hvis du laver det som et svar, så får du også nogle point :-)
Avatar billede borrisholt Novice
06. april 2004 - 12:48 #4
Svar
Avatar billede screwdriver Nybegynder
06. april 2004 - 12:57 #5
Hvorfor sker der ikke en skid når jeg trykker på accepter ?
Avatar billede borrisholt Novice
06. april 2004 - 13:43 #6
Du skal vælge mit navn og trykke på accepter
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