Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pointers u Delphi-u

[es] :: Pascal / Delphi / Kylix :: Pointers u Delphi-u

[ Pregleda: 3616 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

query
NL

Član broj: 51311
Poruke: 30
*.upc-j.chello.nl.



Profil

icon Pointers u Delphi-u23.04.2005. u 21:05 - pre 231 meseci
1. Trebam da napravim obican program sto ce zamjenuti mjesta od dva pointera (tip ^String).
Primjer prije zamjene mjesta:
pointer1 - majmun
pointer2 - zec

Poslije zamjene mjesta:
pointer2 - majmun
pointer1 - zec

2. drugi program mora da zamjeni vrijednosti u dva pointer-a.
primjer prije zamjene:
pointer1 - majmun
pointer2 - zec

Poslije zamjene mjesta:
pointer1 - zec
pointer2 - majmun

Kako da ovo napravim? By the way nemam pojma kako se radi sa pointerima. Ovo mi treba za skolu.

Unaprijed hvala
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Pointers u Delphi-u24.04.2005. u 01:58 - pre 231 meseci
Mozes koristiti nesto ovako za promenu mesta bilo kojeg tipa promenljive. Jedino ti treba da znas koja je velizina te promenljive, a to se lako uradi samo pozivanjem SizeOf funkcije (SizeOf(Pointer) vraca velicinu pointera, SizeOf(Integer) velicinu integera, itd)
Code:
procedure SwapVar(var V1; var V2; Size: Integer);
var
  Temp: Pointer;
begin
  GetMem(Temp, Size);
  Move(V1, Temp, Size);
  Move(V1, V2, Size);
  Move(V2, Temp, Size);
  FreeMem(Temp, Size);
end;

Znaci ako imas dva pointera (P1 i P2) treba samo da pozoves
Code:
SwapVar(P1, P2, SizeOf(Pointer));

 
Odgovor na temu

Rapaic Rajko
Bgd

Član broj: 4105
Poruke: 810
217.119.242.*



+62 Profil

icon Re: Pointers u Delphi-u25.04.2005. u 09:54 - pre 231 meseci
Evo primer nekog koda za rad sa string pointerima:

Code:

var 
  pstr1, pstr2: ^string; // u VCL-u postoji PString, koji je BAS TO
  atempstr: string;
begin
  // alociramo memoriju za pointere/stringove
  new(pstr1);
  new(pstr2);
  try
    pstr1^  := 'majmun';
    pstr2^ := 'zec';
    // neka zamena
    atempstr := pstr1^;
    pstr1^ := pstr2^;     
    pstr2^ := atempstr;
  finally    // oslobadjamo memoriju pointera/stringova
    dispose(pstr1);
    dispose(pstr2);
    pstr1 := nil; // ovo je dobra praksa, jer dispose() to NE RADI
    pstr2 := nil;
  end;  
end;


Vecinu programera zbunjuje to sto je string vec dinamicka konstrukcija, to jest neki string je POINTER na memoriju na heap-u. Pa po toj logici, ispada da je neki PString pointer na pointer na neku memoriju. Jeste, tako je, pa? Sve su to tekovine jezika sa kojima Pascal compiler (u slucaju Delphi 6-ice, verzija 14, racunato od legendarnog TurboPascal-a 1.0) izlazi lako na kraj; problem je u glavama programera da to shvate/prihvate. Za sve je potrebno iskustvo; samo polako...

Rajko
 
Odgovor na temu

query
NL

Član broj: 51311
Poruke: 30
*.upc-j.chello.nl.



Profil

icon Re: Pointers u Delphi-u26.04.2005. u 16:44 - pre 231 meseci
Hvala lijepo na odgovorima.

Napravila sam i tek sad vidim da i nije toliko tesko. :)
prvi primjer:

Code:

procedure TForm1.btnVerwisselClick(Sender: TObject);
var
 psP1,
 psP2,
 psP3 : ^String;
begin
  // 
  New (psP1);
  // 
  New (psP2);
  // 
  psP1^ := edtWoord1.Text;
  psP2^ := edtWoord2.Text;
  //Pointers omwisselen
  psP3 := psP1;
  psP1 := psP2;
  psP2 := psP3;
  //
  edtWoord1.Text :=  psP1^;
  edtWoord2.Text :=  psP2^;
  // Geef geheugen weer vrij
  Dispose (psP1);
  psP1 := NIL;
  Dispose (psP2);
  psP2 := NIL;
end;


Drugi primjer:
Code:

procedure TForm1.btnVerwisselClick(Sender: TObject);
var
 psP1,
 psP2,
 psP3 : ^String;
begin
  // 
  New (psP1);
  New (psP2);
  New (psP3);
  //
  psP1^ := edtWoord1.Text;
  psP2^ := edtWoord2.Text;
  // 
  psP3^ := psP1^;
  psP1^ := psP2^;
  psP2^ := psP3^;
  //
  edtWoord1.Text :=  psP1^;
  edtWoord2.Text :=  psP2^;
  // 
  Dispose (psP1);
  psP1 := NIL;
  Dispose (psP2);
  psP2 := NIL;
  Dispose (psP3);
  psP3 := NIL;
end;
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Pointers u Delphi-u

[ Pregleda: 3616 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.