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