Více ukazatelů směřujících na stejnou adresu paměti

2

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.