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>
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.
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.
pointeru
int num1 = 5; // definice klasické proměnné
printf("Cislo: %d, pointer: %p\\n", num1, &num1);
// Cislo: 5, pointer: 0x0F0D9867