[ djordje @ 05.01.2005. 03:15 ] @
Sta se prvo definise? Pokazivac na neki tip ili taj tip? Meni nekako logicno da se prvo definise taj tip pa onda pokazivac, ali mi se cini da sam negde video obrnuto
[ sasas @ 05.01.2005. 04:57 ] @
U pravu si, prvo tip pa pointer.

ss.
[ Srki_82 @ 05.01.2005. 07:29 ] @
Code:
type
  PKlijent = ^TKlijent;
  TKlijent = record
    Ime, Prezime: String;
    ID: Cardinal;
    Prethodni, Sledeci: PKlijent;
  end;

Ovo je sasvim OK i lepo ce da se iskompajlira (prvo pointer, pa onda tip :P)


[ Rapaic Rajko @ 05.01.2005. 08:56 ] @
Ovo zadnje je neka vrsta forward deklaracije, i tako kako je napisano ce da radi. Ali probaj da ubacis nesto izmedju te dve deklaracije (da ih razdvojis), pa vidi sta se onda desava...

Rajko
[ IgLo @ 05.01.2005. 12:19 ] @
Evo sta kaze cika Stephen O'Brien o ovoj pojavi :

Citat:

Posto se dinamicka memorija koristi za smestanje velikih i slozenih tipova podataka, pokazivacke promenljive se stoga generalno koriste za manipulaciju ovakvih tipova podataka. Definicija jedne kompleksne strukture podataka je procedura koja se izvodi u dva koraka:

Code:

Type
   CustPtr =^CustRec;
   CustRec = Record
      Name : String [25];
      Address : String [30];
      City : String [30];
      State : String [2];
      Zip : String [5];
   End;

Var
   Cust : CustPtr;


U ovom primenu iskaz CustPtr = ^CustRec; definise CustPtr kao pokazivac koji ukazuje na CustRec. Ovde treba imati u vidu da custRec u ovom momentu jos nije definisan. Deklaracija pokazivaca je jedan od retkih slucajeva u okviru Turbo Pascal-a gde se dozvoljava pozivanje na strukturu podataka pre nego sto je ona definisana. Promenljiva Cust se potom definise tipom CustPtr.


Sve u svemu,... mozda je i moguce uraditi kontra (nikada nisam probao), ali svi rade (ili bi bar trebali da rade) na ovaj nacin.
[ -zombie- @ 05.01.2005. 13:46 ] @
srki82 je dao primer, ali niko da objasni zašto se to tako radi..

ako npr želite da pravite povezanu listu (linked list), ili drvo, red, stek, tj bilo koju dinamički memorisku strukturu, ovo vam je neophodno.

Code:
PČlan = ^TČlan;
TČlan = record
    Vrednost: integer;
    Sledeći: PČlan;
end;


da niste prvo definisali PČlan, ne bi mogli da definišete polje Sledeći.

a inače, kada pređete sa pointera i rekorda na klase i objekte (tj sa TP na Delphi), više nema potrebe za ovim, jer se klase vrlo regularno mogu deklarisati unapred.