Adresové operátory

Adresové operátory označované aj ako ukazovatele (anglicky pointer, česky ukazovateľ, slovensky smerník) sú jedným zo zložitejších tém pre začiatočníkov. Avšak pre manipuláciu určitých dátových štruktúr môže použitie ukazovateľov zjednodušiť kód.


* (dereferencia)

Prvým a možno povedať, že najzložitejším, ale súčasne aj najmocnejším odvodeným typom je ukazovateľ, tak isto označovaný ako smerník (pointer). Oba názvy sú ekvivalentné – ktorý z nich budete používať, je otázka vkusu. Na efektívne programovanie je veľmi dôležité dôkladne pochopiť princíp práce s ukazovateľmi, už aj z toho dôvodu, že spôsobujú najväčšie percento programových chýb.

Čo je to vlastne ukazovateľ? Typ ukazovateľ je vždy združený s nejakým iným typom, na ktorého inštanciu „ukazuje” (a nemusí to by len jeden zo základných typov). Premenná typu ukazovateľ obsahuje adresu miesta uloženia tejto inštancie v pamäti.

Uveďme si príklad: máme premennú a typu int, ktorej hodnota (obsah) je napríklad 10. Nech je táto premenná umiestnená na adrese 0x0028FBFC. Potom obsah inej premennej p typu „ukazovateľ na int“, ukazujúcej na premennú a (ktorá je typu int), bude práve 0x0028FBFC.

Adresové operátory pointer ukazovateľ smerník

Deklarácia premennej typu ukazovateľ na nejaký základný typ je veľmi jednoduchá. Medzi názov typu a názov premennej vložíme znak * (hviezdička).

int a = 10;    // premenná a je typu int s priradenou hodnotu 10 
int* p = &a;   // premenná p je typu ukazovateľ na int s priradenou referenciou na a (& získa adresu a)

& (referencia)

Ďalším odvodeným typom, o ktorom si povieme, je referencia (reference). Občas sa možno stretnúť aj s názvom referenčný typ (tento typ v jazyku C neexistuje a objavuje sa až v C++).

Tento operátor & je unárny. Ako už názov adresový operátor napovedá, umožňuje získať adresu objektu, na ktorý je aplikovaný. Adresu objektu môžeme použiť v najrôznejších situáciách, obvykle je to ale v súvislosti s ukazovateľmi. Bez tohoto operátoru by sme neboli schopní pracovať so súbormi a ani štandardný vstup by sme neboli schopní čítať inak, než po znakoch.

Referencia je veľmi podobná ukazovateľu a zjednodušene môžeme povedať, že je to ukazovateľ, ktorý sa automaticky dereferencuje. Obsahom premennej typu referencia je takisto adresa inej premennej, ale navonok sa referencia javí ako normálna premenná daného typu. Tak ako ukazovateľ aj referencia je združená s nejakým iným typom – hovoríme, že ide o referenciu na daný typ.

Deklarácia referencie

je podobná deklarácii ukazovateľa, len namiesto znaku * vložíme medzi typ a meno premennej znak & (tzv. ampersand).

int a = 10;   // premenná a je typu int s priradenou hodnotu 10 
int& p = a;   // premenna p je typu referencia na int s uloženou adresou na a

Všimnime si, že referenciu je potrebné inicializovať menom existujúcej premennej, nie je správny napríklad nasledujúci zápis:

int& p = 10;

Prekladač síce pri preklade tohto riadka v mnohých prekladačoch neohlási chybu, ale (podľa nastavenia) vydá varovanie (warning), že na inicializáciu referencie bola použitá pomocná (dočasná – temporary) premenná, ktorej hodnota sa nastavila na 10. Dostaneme tak referenciu na premennú, ktorú sme vôbec nedeklarovali a ktorú pravdepodobne ani nechceme.

Po inicializácii už nie je nijakým spôsobom možné zmeniť referenciu tak, aby odkazovala na inú premennú. Referenčná premenná sa ďalej správa úplne rovnako ako premenná s ňou združená, to znamená, že každá operácia s referenciou mení v skutočnosti premennú, na ktorú referencia odkazuje:

int x = 1;   
int& rx = x;
printf("x = %i", x);
rx = 2;
printf("x = %i", x);

Po prebehnutí tohto úseku programu sa na štandardnom výstupe objaví:

x = 1   
x = 2

Z toho je zrejmé, že zmena premennej rx sa rovnako dotkla aj premennej x.

Referenčná premenná slúži teda ako nejaký „alias”, pomocou ktorého sa môžeme odvolávať na inú premennú. Na tomto mieste sa sluší podotknúť, že deklarácia a používanie referencií priamo v tele funkcií sa prakticky obmedzuje na niekoľko málo situácií, ako napríklad práca s nejakou (z hľadiska zápisu) komplikovane prístupnou premennou – namiesto vypisovania siahodlhých reťazcov pri opakovanom prístupe k tejto premennej si jednoducho deklarujeme referenciu s krátkym a rozumným menom, ktorá na túto premennú odkazuje. Skutočná výhoda referencií sa však ukáže až pri ich používaní ako typu argumentov funkcie alebo návratovej hodnoty. Ale k tomuto sa dostaneme až pri rozprávaní o funkciách.

Tento text je preložený a upravený zo stránok arduino.cc pod licenciou Creative Commons Attribution-ShareAlike 3.0.

Výber na čítanie...

Atmel Studio 7
Atmel Studio 7

Firma Atmel vydala novú verziu svojho editora Atmel Studio 7. Pre nás fanúšikov Arduina je to dobrou správou, pretože sa viac sústreďuje na Arduino. Nové možnosti sú aj v oblasti moderných 32-bitových mikrokontrolérov. Úžasné na Atmel Studiu je aj to, že nepotrebujete mať ...

Čítať viac...

Prvý program: Arduino blikanie LED
Prvý program Arduino blikanie LED

V tomto článku ti ukážem praktickú ukážku, ako zapojiť a naprogramovať Arduino. Ide o také to programátorské “Hello World” s Arduinom. V našom prípade to je “Arduino blikanie LED”. Blikanie LED diódou možno bez ďalších súčiastok realizovať s akoukoľvek...

Čítať viac...

Arduino Yún
Arduino Yún

Arduino YÚN je dokonalá doska, ktorá sa používa pri navrhovaní pripojených zariadení a vo všeobecnosti aj projektov internet vecí. Spája silu Linuxu s používaním Arduino...

Čítať viac...

Obľúbené produkty...

TTP229L 16-key Touch Sensor

7.86 EUR

7.86 EUR

Keyestudio ESP32 Basic Learning Kit

31.45 EUR

27.99 EUR

Keyestudio CAN-BUS Shield MCP2515

10.71 EUR

10.71 EUR

Vyhľadať články
Programovanie...
  • Operátory preprocesora

    Operátory preprocesora alebo znak # je signálom pre preprocesor. Preprocesor sa spustí pri každom...

  • Ostatné IO funkcie

    U Arduina je možné generovať i zvuk, ale iba v najjednoduchšej podobe. Neumožňuje totiž generovať...

  • Funkcie času

    Štandardne majú dosky Arduino štyri funkcie času. Jedná sa o funkcie delay (), delayMicroseconds ...

  • Špeciálne operátory

    Spomenieme ešte špeciálne operátory alebo špeciálne znaky, ktoré sa používajú pri programovaní a ...

  • Zložené operátory

    Použitie zložených priraďovacích operátorov zjednodušuje a sprehľadňuje zdrojový kód, no použitie...

Podpora webu
Na kávu už prispeli
Dátum Meno Suma
22.03.2025 Radoslav Kopera 5€
30.12.2024 Jozef Greš 5€
20.10.2024 Radovan Nosáľ 20€
02.10.2024 Milan Durkoš 10€
08.01.2024 Veres Dusan 10€
15.05.2023 Ivan Danis 10€
28.09.2022 Ivan Vrab 7€
14.05.2022 Nemcic Marian 10€
04.02.2022 Robert Bilko 5€
29.01.2022 Peter Buffa 5€
19.11.2021 Rastislav Rehak 5€
16.09.2021 Anton Strela 5€
13.09.2021 Juraj Jedlak 5€
02.09.2021 Michal Marek 7€
08.08.2021 František Uhrík 5€
21.07.2021 Juraj Hrdina 5€
25.03.2021 Jan Nemec 10€
16.03.2021 Igor Pavlov 5€
25.02.2021 Lukas Lacuch 5€
06.11.2020 Pavol Balint 5€
05.11.2020 Marek Horečný 5€
05.10.2020 Jan Kusnir 5€
27.04.2020 Jan Zuskin 15€
26.04.2020 Dušan Sojka 5€
24.02.2020 Juraj Lackanič 5€
22.01.2020 František Žilinec 10€
20.05.2018 Tomáš F. 2€
17.12.2018 Pavol P. 5€
QR Donate 10Eur