Jump to content
  • 0
Smexy

pomoc Ukazatelé

Dotaz

4 odpovědí na tuto otázku

Recommended Posts

  • 5

Čo je to pointer

Využitia sú rôzne a pointery sa nachádzajú všade. Asi najznámejší ukazovateľ je "CIP" - current instruction pointer na architektúre x86. Všeobecne sa mu hovorí program counter. Na čo slúži? Jednoducho keď sa vykonáva kód, musíš vedieť ktorú inštrukciu vykonávaš.. A adresa tejto inštrukcie je vždy uložená na špeciálnom mieste - CIP. CIP sa zvyšuje prípadne upravuje s tokom programu.

Napríklad pred volaním funkcie v Pawn je adresa nasledujúcej vykonávanej inštrukcie uložená do RAM. Do CIP sa vloží adresa na začiatok volanej (novej) funkcie. Po návrate z nej sa obnoví pôvodný CIP a pokračuje sa vo volajúcej (starej) funkcii.

Pointer v Pawn

Pawn bol navrhnutý tak, aby neobsahoval pointre, pretože pre neskúsených programátorov predstavujú riziko (ak uložíš dáta na miesto kam nemôžeš, jednoducho ti crashne appka). Napriek tomu na pointery môžeš naraziť. Väčšina významnejších kódov ich priamo používa (viaceré z knižnice y_ysi).

Využívajú sa aj tu:

new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z); // tato funkcia nevracia returnom hodnotu, ale ulozi hodnoty do premennych x, y, z

GetPlayerPos() prevezme adresy (resp. referencie), nie hodnoty a upraví to, čo je na daných adresách.
Ak by si chcel urobiť niečo podobné (použiť referencie (referencie pracujú ako pointery) a prebrať adresy premenných namiesto hodnôt), môžeš definovať referencie pomocou '&':

stock GetPlayerPosEx(playerid, &Float:x, &Float:y, &Float:z) { // vsimni si znak '&'
  x = y = z = 0;
  return;
}

Pokročilejšie využitia pointerov v Pawn už moc nemajú pre tvorcu módu význam a vyžadujú hlbšie znalosti nízkoúrovňových programovacích jazykov.

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0

Máš televizor, ale jsi zapomnětlivý a nikdy si nepamatuješ, kde se ten televizor nachází. Televizor je příliš obtížné brát stále s sebou, takže si na kousek papíru napíšeš "obývák", nakreslíš k tomu obrázek televizoru a papír nosíš stále u sebe. Díky němu se stačí vždy podívat a hned se k televizoru můžeš dostat.

Televizor je objekt v paměti a obývák je jeho adresa v paměti. Paměť je sice lineární, ale procházet ji celou nejde, pokud bys v ní chtěl hledat konkrétní objekt, takže musíš znát jeho adresu (celočíselný ofset od začátku paměti). Papírek/ukazatel je pak datový typ, který tuto adresu obsahuje, jehož prostřednictvím se k původnímu objektu můžeš dostat. & je zpravidla operátor získání adresy daného objektu (proměnná -> ukazatel), zatímco * získání proměnné, ve které ten objekt je (ukazatel -> proměnná).

Sdílet tento příspěvek


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×