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ý.