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
Definisanje pointera
Zaključano
Zakačeno
U pravu si, prvo tip pa pointer.
ss.
ss.
Potpis
When something is hard to do, then it's not worth doing.
Code:
type
PKlijent = ^TKlijent;
TKlijent = record
Ime, Prezime: String;
ID: Cardinal;
Prethodni, Sledeci: PKlijent;
end;
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)
Potpis
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
Rajko
Evo sta kaze cika Stephen O'Brien o ovoj pojavi
:
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:
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.
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;
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.
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.
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.
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;
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.