Přidáno 2 833 bajtů,
9. 10. 2012, 22:08 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.
[[Category:Typové konstanty]]