Pointery jsou v nízkoúrovňových jazycích jako je C důležitou součástí vývoje každého softwaru. Umožňují nám měnit hodnoty přímo v paměti nebo pracovat přímo s paměti v daných částech.

Pointer = ukazatel do paměti tedy například operační paměti RAM.

<aside> ⚠️ POZOR! Pointery jsou nebezpečné a dokáží váš program velmi rychle zničit. Při práci s nimi si dávejte pozor na to co děláte více, než kdy jindy!

</aside>

<aside> 💡 TIP pro snažší naučení a pochopení si stačí hlídat:

Zkuste se zaměřit na to kdy se zapisuje & a kdy *. Také se dívejte kdy je co v () a kdy ne!

</aside>

Základní informace

Kopírování hodnot v paměti

Pokud chceme například pracovat se 2 proměnnými, kdy každá obsahuje stejnou hodnotu můžeme to v jazyku C udělat takto:

int a = 5;
int b = a;

// a - 5 (originální hodnota)
// b - 5 (zkopírováno z a)

Tento zápis vypadá a funguje v pořádku, ale dochází ke kopírování hodnot, tedy vytváří se stejná data 2x v paměti na dvou místech.

V některých případech to je potřeba, ale například u pole, to potřeba není. Pole však specifický případ, který si vysvětlíme až na závěr této lekce.

a++; // zvětší se původní 5 o 1, tedy bude 6
b; // bude stále 5, jelikož hodnoty byly kopírovány!

Ukázka výše ukazuje proč nekopírovat, pokud chceme v obou proměnných mít stejná data vždy ať uděláme cokoliv s jednou nebo druhou proměnnou.

Práce s pointery

Před touto částí si zopakujte vše co více o jazyce C - Programování v jazyce C

<aside> ⚠️ POZOR! Část níže je již složitá a je třeba si dávat pozor na to co se kde na řádku děje!

</aside>

Používané nové znaky

Znak Význam
& Získání pointeru z proměnné
* Označení, že proměnná v sobě odkazuje pointer, ne na hodnotu!
** Označení více úrovní pointerů nebo získání dat z pointeru.

Zatím se zaměříme na první dva znaky, tedy získání a nastavení proměnné jako pointeru.

Získání pointeru

int num1 = 5; // definice klasické proměnné

printf("Cislo: %d, pointer: %p\\n", num1, &num1);
// Cislo: 5, pointer: 0x0F0D9867