====== 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: [[https://cs.wikipedia.org/wiki/Ukazatel_(programov%C3%A1n%C3%AD)|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 ====
#include
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
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);
}