V C můžete dělat věci, které se na první pohled mohou zdát matoucí. Je možné mít více ukazatelů směřujících na stejné místo v paměti. To není chyba. To je vlastnost jazyka.
Zvažte následující situaci. Deklarujete celočíselnou proměnnou i. Potom deklarujete tři ukazatele: p, q a r.
Podívej, co se tady děje. p získá adresu ,i. "q" dělá to samé. rnepřistupuje přímo k i. Jednoduše zkopíruje adresu, která je uložena v p. Protože pukazuje na i, rtaké začíná ukazovat na i`.
Po provedení těchto řádků nemáte tři samostatné proměnné rozptýlené v paměti. Máte jednu proměnnou se čtyřmi aliasy.
- “já”.
- “*p”.
- “*q”.
- “*r”.
Všechny představují totéž.
K tomu dochází, protože přiřazení ukazatele kopíruje hodnotu adresy. Adresa na pravé straně zadání se přesune do proměnné na levé straně. Nedochází k hlubokému kopírování dat. Přenese se pouze adresa paměti.
Nejsou zde žádná omezení. Můžete řetězit dohromady tolik ukazatelů, kolik chcete. a = b; c = b; d = c; – na tom nezáleží. Všechny ukazují na stejné místo v paměti RAM.
Počet ukazatelů, které lze uložit, a tedy ukazovat na stejnou adresu, není omezen.
Proč je to důležité? To znamená, že můžete volně sdílet odkazy. Můžete vytvořit aliasy dat pro použití v různých částech vašeho kódu. Můžete vytvářet složité datové struktury, kde na sebe uzly odkazují.
To také znamená, že je třeba opatrnosti. Změňte *p na 5. Co se stane s ‘i’? Bude to „5“. Změnit *q? ‘já’ se znovu změním. Všechny aliasy vidí stejnou aktualizaci.
To jsou základy C. Ale je to mocný nástroj. A nebezpečné, pokud ztratíte kontrolu nad tím, který ukazatel ukazuje na co.




































