Wskaźniki.



W języku Turbo Pascal występują zmienne dynamiczne reprezentujące obiekty, dla których pamięć jest przydzielana i zwalniana na określone żądanie. Zmienne dynamiczne różnią się tym od zmiennych statycznych, że nie zajmują pamięci gdy nie są już potrzebne. Zmienne te nie posiadają identyfikatorów, a odwołanie do nich następuje za pomocą wskaźnika. Wartościami wskaźników są elementy typu wskaźnikowego, które określają adresy pamięci zmiennych dynamicznych.
Zastosowanie zmiennych dynamicznych w programie pociąga za sobą konieczność zdefiniowania odpowiednich typów wskaźnikowych. Definicja pojedynczego typu wskaźnikowego ma postać:
type identyfikator_typu = ^identyfikator_typu_bazowego;
gdzie identyfikator_typu_bazowego określa typ, którego dane będą wskazywane przez wskaźnik. Identyfikator ten może, ale nie musi być wcześniej określony. W drugim przypadku konieczne jest jego określenie w tej samej części definiującej typy, w której występuje definicja odnośnego typu wskaźnikowego.
type wskaznik = ^zapis;
     zapis = record
               naglowek : Char;
               tekst    : String [50];
               liczba   : Integer;
             end;			
Definicja ta wiąże typ wskaznik ze zbiorem wskazań danych typu zapis. Jeśli wprowadzimy teraz deklarację:
var adres : wskaznik;
to zmiennej wskaźnikowej adres będą mogły być w programie przypisywane adresy pamięci danych typu zapis.

Poniższy przykłdowy program obrazuje sposób tworzenia listy jednokierunkowej, jej sortowania i zwalniania pamięci zajmowanej przez listę.
Definiujemy typ wskaźnikowy wsk typu ^lis, a następnie definiujemy typ bazowy lis, który jest rekordem zawierającym licz typu integer oraz nast typu wsk. Na początku tworzenia listy jednokierunkowej zmiennej wskaźnikowej g przypisujemy adres pusty czyli nil. Następnie w procedurze tworz deklarujemy zmienną pomocniczą pom typu wsk. Za pomocą procedury New tworzona jest nowa zmienna dynamiczna, której adres zostanie podstawiny pod zmienną pom, wtedy wstawiamy losową liczbę do pola licz, a do pola nast wpisujemy adres zmiennej g. Następnie zmienną g przenosimy na koniec listy przypisując jej adres zmiennej pom. Podczas porusznia się po liście należy używać zmiennych pomocniczych aby nie zgubić adresu końca listy znajdującego się pod zmienną g.