(********************************) (* Typovy pointer na datovy typ *) (* integer, string a zaznam *) (********************************) program DemoDDS1; type zaznam = record cisloByte: byte; cisloInt: integer; retezec: string; end; var { v sekci var se deklaruji staticke datove struktury } pInt: ^integer; { pointer na datovy typ integer } pStr: ^string; { pointer na datovy typ string } pZ: ^zaznam; { pointer na datovy typ zaznam } i: integer; z: zaznam; begin i := 1; z.cisloByte := 2; z.cisloInt := 35; z.retezec := 'abcd'; { pointery budou ukazovat na existujici promenne, ktere jsou staticke datove struktury: } pInt := @i; { pointer pInt obsahuje adresu promenne i, tedy ukazuje na promennou i } pZ := @z; { pointer pZ obsahuje adresu promenne z, tedy ukazuje na promennou z } pInt^ := 10; { vysledek je stejny, jako bychom napsali i:=10; } pZ^.cisloInt := pInt^; { do zaznamu z - jeho prvku "druhy" se nacte obsah promenne i, tedy 10; stejne jako pZ^.cisloInt:=i; } pStr := @ z.retezec; { pointer pts ukazuje na treti prvek zaznamu z, ktery je typu string } writeln(pStr^); { vypise se retezec, na ktery pStr ukazuje } writeln(pZ^.retezec);{ totez jako predchozi prikaz } writeln(pStr^[1]); { vypise prvni znak retezce, na ktery ukazuje pStr } writeln(pZ^.retezec[1]); { totez jako predchozi prikaz } pInt := nil; { obsahem promenne pInt (adresou, na kterou ukazuje), je 0 } { pointery budou ukazovat na dynamicke promenne, ktere jsou dynamicke datove struktury: } New(pInt); { v pameti se vytvori dynamicka promenna o delce 2 B, pointer pInt obsahuje jeji adresu } pInt^ := 82; { obsahem dynamicke promenne je cislo 82, s promennou i uz nema nic spolecneho, nemeni ji } pZ^.cisloInt := pInt^; z.cisloInt := pInt^; { totez jako predchozi prikaz } GetMem(pZ,sizeof(pZ^)); { nebo GetMem(pZ,sizeof(zaznam)); } pZ^.cisloByte := z.cisloByte+24; pZ^.cisloInt := pInt^; { vsechnu pamet, kterou jsme "rucne" zabrali, musime taky "rucne" uvolnit: } Dispose(pInt); { dynamickou promennou, na kterou ukazoval pInt, uz nepotrebujeme } pInt := nil; { na konci programu neni nutne, ale je to dobry zvyk } FreeMem(pZ, sizeof(pZ^)); pZ := nil; readln; end.