In C kun je meerdere pointers hebben die allemaal op exact dezelfde geheugenlocatie gericht zijn. Het is geen bug. Het is een kenmerk.
Je zou drie integer-pointers kunnen declareren: p, q en r. Vervolgens kunt u ze allemaal zo instellen dat ze naar dezelfde gehele variabele i verwijzen.
Kijk hier wat er gebeurt. p krijgt het adres van i. q krijgt ook het adres van i. r krijgt wat p vasthoudt. Dat is het adres van i.
Nadat deze code is uitgevoerd, heb je een vreemde situatie. i heeft nu vier namen. Je kunt er toegang toe krijgen via i, *p, *q of *r. Ze verwijzen allemaal naar dezelfde plek in het RAM-geheugen.
Hoe aanwijzertoewijzing werkt
Wanneer u de ene pointer aan de andere toewijst, kopieert u niet de waarde waarnaar zij verwijzen. U kopieert het adres.
r = p kopieert niet het gehele getal i. Het kopieert het geheugenadres dat is opgeslagen in p. Omdat p het adres van i bevat, bevat r nu ook het adres van i.
Er is geen limiet aan het aantal pointers dat één adres kan delen. Je zou tien tips kunnen hebben. Of honderd. Ze wijzen allemaal gewoon naar hetzelfde.
Waarom dit ertoe doet
Dit gedrag verandert de manier waarop u over gegevens denkt. Een enkele variabele in het geheugen kan vele aliassen hebben. Als u de waarde via één aanwijzer wijzigt, ziet elke andere aanwijzer de verandering.
Nu is i 10. *q is 10. *r is 10. Ze kijken allemaal naar dezelfde gegevens.
Dit is nuttig. Hiermee kunt u verwijzingen naar functies doorgeven zonder grote structuren te kopiëren. Het laat verschillende delen van uw code op dezelfde gegevens werken. Maar het betekent ook dat je voorzichtig moet zijn. Het veranderen van één aanwijzer kan gevolgen hebben voor anderen.
Veelvoorkomende misvattingen
Sommige beginners denken dat het toewijzen van aanwijzingen de gegevens kopieert. Dat is niet het geval. Het kopieert het adres.
Anderen vragen zich af of er een grens is. Er is geen. Met de taal kunt u zoveel verwijzingen maken als u nodig heeft. De compiler houdt je niet tegen.
Het eindresultaat
Meerdere pointers kunnen naar hetzelfde adres verwijzen. Dit is standaard C-gedrag. Je kunt verwijzingen naar elkaar toewijzen. Het adres wordt gekopieerd, niet de waarde. De variabele blijft hetzelfde. De namen vermenigvuldigen zich gewoon.
“Er is geen limiet op het aantal verwijzingen dat hetzelfde adres kan bevatten (en daarom naar) kan verwijzen.”
Deze flexibiliteit is krachtig. Het vereist discipline. Maar het is van fundamenteel belang voor de manier waarop C werkt. Als je dit begrijpt, begrijp je een kernconcept van geheugenbeheer in C.


























