Додому Internet a IT Programování Proč může více ukazatelů odkazovat na stejnou proměnnou v C

Proč může více ukazatelů odkazovat na stejnou proměnnou v C

5

C umožňuje vytvářet chaos i přehlednost pomocí ukazatelů. Záleží na tom, jak se na to díváte. Jazyk umožňuje libovolnému počtu ukazatelů ukazovat na stejnou adresu paměti. To není chyba. Toto je funkce.

Zvažte „i“. Deklarujte p, q a r jako ukazatele na celá čísla. Vyjmenujte je všechny pomocí „i“. Kód vypadá takto:

Docela jednoduché. Ale co se děje pod kapotou?

Ukazatele jsou jen adresy

Ve výše uvedeném příkladu r neukazuje na p. Ukazuje na cokoli, na co ukazuje p. Jmenovitě na “i”.

Když přiřadíte jeden ukazatel druhému, adresa se zkopíruje. Hodnota na pravé straně se přesune do proměnné na levé straně. Po provedení má „i“ čtyři jména. ‘já’. *p. „*q“. *r.

To vše jsou různé štítky pro stejný kus RAM. Můžete vytvořit tolik ukazatelů, kolik chcete. Omezením je vaše paměť, ne váš jazyk.

Proč je to důležité?

Toto chování mění způsob správy dat. Pokud předáte ukazatel na funkci, všechny změny provedené prostřednictvím tohoto ukazatele ovlivní původní proměnnou. Pokud více funkcí ukládá ukazatele na stejnou adresu, všechny vidí stejné změny.

To vytváří obecný stav. Užitečné pro ukládání do mezipaměti. Je nebezpečné, když ztratíte kontrolu nad tím, kdo kde nahrává.

Počet ukazatelů, které lze uložit a ukazovat na stejnou adresu, není omezen.

Tato flexibilita je mocná. Je také komplexní. Jeden ukazatel změní hodnotu. Všichni ostatní to okamžitě vidí. Není nutná žádná synchronizace. Pouze přímý přístup do paměti.

Přemýšlejte o ladění. Pokud se proměnná neočekávaně změní, zkontrolujte všechny ukazatele. Kdokoli z nich může být viníkem. Všechny mají stejnou sílu. A stejnou zodpovědnost.

To není složitá logika. Toto je jednoduchá ukazatelová aritmetika. Ale důsledky se táhnou po celém vašem programu. Jedna adresa. Mnoho jmen. Všichni jsou připojeni.