Ukazatelé
Jak se pracuje s ukazateli:
- 1. deklarace typu pointer: type Pint = ^integer;
- 2. deklarace proměnné typu pointer: var ui: Pint; (což je ekvivalentní s var ui: ^integer;)
- 3. inicializace pointeru:
- + inicializace prázdného pointeru: ui := nil;
- + pomocí procedury new: new(ui); (alokujeme novou paměť - je třeba ji uvolnit pomocí dispose(ui);, až nebude potřeba)
- + inicializace hodnotou jiného pointeru: ui := ui2;
- + adresou existující statické proměnné: ui := @i;
- 4. zápis přes pointer (na místo kam pointer ukazuje): (ui^) := 42;
- 5. čtení přes pointer (z místa kam pointer ukazuje): x := (ui^);
Předáváme-li do procedury/funkce jako parametr ukazatel, má to stejný efekt, jako předávání hodnoty odkazem pomocí klíčového slova var. Procedury nactiP1
a nactiP2
tedy budou fungovat stejně:
type PBox = ^TBox; TBox = record k: longint; e: longint; next: PBox; end; var B: PBox; B2: TBox; procedure nactiP1(var b: TBox); begin readln(b.k,b.e); end; procedure nactiP2(p: PBox); begin readln(p^.k,p^.e); end;
Jednosměrný spojový seznam
Následující procedura demonstruje průchod dynamicky alokovaným spojovým seznamem:
procedure vypis(S: PBox); begin while S <> nil do begin writeln('k = ',S^.k,' e = ',S^.e); S:=S^.next; end; end;
Domácí úkol
Není zadán. Příště bude dvojitý.