Obsah

Ukazatelé a reference

Proč používat ukazatele? Proto ⇒ http://kmlinux.fjfi.cvut.cz/~fabiadav/cecko/poznamky-k-jazyku-c/ukazatele

Ukazatel (anglicky pointer) je v informatice označení pro datový typ, který slouží k uložení adresy v paměti počítače. Ukazatel slouží pro zpřístupnění dat, která jsou na příslušné adrese v operační paměti uložena. Zdroj: Wiki

Ukazatel (pointer)

deklarce proměnné

char promenna;
char dalsi_promenna;

deklarace ukazatele - *

char *ukazatel; // vznikne místo v paměni pro uložení odkazu na nějakou proměnnou typu char

operátor reference - &

ukazatel = &promenna; // přiřazení adresy v paměni na proměnou pomocí & (ampersand)

operace dereference - *

dalsi_promenna = *ukazatel;

Příklad

ukazatel.cpp
#include <iostream>
using namespace std;
 
int *ukazatel, promenna, dalsi_promenna;
 
int main ()
{
   promenna = 2018; // přiřazení hodnoty do promenné
   ukazatel = &promenna; // uložení adresy paměti na proměnnou 'promenna'
   dalsi_promenna = *ukazatel; // do jiné proměnné uložení HODNOTY přes ukazatel
   cout << dalsi_promenna;
 
   int i; // definice proměnné i datového typu int
   int a[3]; // definice proměnné a, pole typu int se třemi prvky
   int *p; // definice proměnné p, ukazatele na datový typ int
   p = &i; // hodnota pointeru je nastavena na adresu proměnné i
   *p = 3; // do paměti na adresu odkazovanou ukazatelem p se uloží hodnota 3
   p = &(a[2]); // hodnota pointeru je nastavena na prvek pole a s indexem 2
   p = p - 2; // hodnota pointeru je nastavena na prvek pole a s indexem 0 (tj. první prvek pole)
   *p = 5; // do paměti na adresu odkazovanou p se uloží hodnota 5 (tedy první prvek pole má tuto hodnotu)
 
    return 0;
} 

Praktický příklad

Zdroj: https://www.itnetwork.cz/cplusplus/cecko/dynamicka-prace-s-pameti/tutorial-jazyk-c-ukazatele

ukazatel_priklad.cpp
void prohod(int *p_a, int *p_b)
{
    int pomocna = *p_a;
    *p_a = *p_b;
    *p_b = pomocna;
}
 
int main(int argc, char** argv) {
    int cislo1 = 15;
    int cislo2 = 8;
    prohod(&cislo1, &cislo2);
    printf("V a je číslo %d a v b je číslo %d.", cislo1, cislo2);
    return (EXIT_SUCCESS);
}