====== 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); }