@

From Delphi & Pascal (česká wiki)
Jump to navigation Jump to search

Operátor @: Operace s ukazatelem

Operátor @ pomáhá vytvořit ukazatel na proměnnou nebo funkci.

 Operátor   Operace     Typ operandů            Typ výsledku
—————————— ——————————— ——————————————————————— ——————————————————
    @       vytvoření   odkaz na proměnnou,     Pointer (jako
            ukazatele   nebo identifikátor      hodnota nil)
                        funkce nebo procedury  

@ je unární operátor. Pro použití operátoru @ s procedurální proměnou existují speciální pravidla. Typ hodnoty je stejný jako typ hodnoty nil, takže může být přiřazena k libovolné proměnné typu ukazatel.


@ s proměnnou

Použití operátoru @ s běžnou proměnnou (nikoli parametrem) je jednoduché.

Například, mějme tyto deklarace:

type
   DvaZnaky = array[0..1] of Char;
var
   Int: Integer;
   DvaZnakyPtr: ^DvaZnaky;

pak tento příkaz způsobí, že DvaZnakyPtr ukazuje na Int:

   DvaZnakyPtr := @Int;

DvaZnakyPtr^ se stanou novou interpretací hodnoty v proměnné Int, jako kdyby to bylo pole array[0..1] of Char.


Operátor @ s parametrem předávaným hodnotou

Pokud použijete operátor @ s formálním hodnotovým parametrem, dostanete adresu, na které je hodnota parametru uložená v prostoru zásobníku.

Například, mějme formální hodnotový parametr Fred v proceduře a proměnnou FredPtr typu ukazatel.


Jestliže procedura provede příkaz

FredPtr := @Fred;

pak FredPtr^ se odkazuje na hodnotu Fred.


FredPtr^ se ovšem nevztahuje k vlastnímu parametru Fred, ale k hodnotě, kterou procedura dostala přes Fred a uložila na zásobník.


Operátor @ s parametrem předávaným odkazem

Pokud použijete @ s formálním parametrem volaným odkazem, dostanete přímo adresu skutečného parametru (přečtenou ze zásobníku).


Například
  • One je parametr procedury volaný odkazem.
  • Two je proměnná, předávaná do procedury jako skutečný parametr parametru One.
  • OnePtr je proměnná typu ukazatel.

Pak, jestliže procedura provede příkaz

OnePtr := @One;

OnePtr je ukazatel na Two, a OnePtr^ je odkaz na vlastní proměnnou Two.


Operátor @ s procedurou nebo funkcí

Operátor @ můžete také použít s procedurou nebo funkcí a v tom případě dostanete ukazatel na jejich vstupní bod. Turbo Pascal ale nemá prostředky pro jeho využití.

Jediné použití procedurálního ukazatele je předat ho do assemblerovské procedury nebo použití v příkazu inline.


Operátor @ s metodou

Operátor @ můžete použít s kvalifikovaným identifikátorem metody k získání ukazatele na vstupní bod metody.