Meerdere aanwijzers die naar één geheugenadres wijzen

12

Met C kunt u een situatie creëren waarin verschillende verwijzingen naar exact dezelfde plek in het geheugen verwijzen. U kunt meerdere pointers declareren en ze allemaal op dezelfde variabele richten. Dit is niet alleen een theoretische gril. Het gebeurt voortdurend in echte code.

Beschouw dit fragment eens:

Hier pakt p het adres van i. q doet hetzelfde. Dan neemt r de waarde van p aan. Omdat p het adres van i bevat, verwijst r nu ook naar i. De toewijzingsoperator kopieert het adres van de rechterkant naar de linkerkant. Het kopieert de gegevens niet. Het kopieert de locatie.

Nadat deze regels zijn uitgevoerd, heeft i feitelijk aliassen gekregen. U kunt nu toegang krijgen tot het gehele getal i via de oorspronkelijke naam of via een van de pointers.

De variabele i heeft nu vier namen: i, *p, *q en *r.

Er is geen harde limiet voor het aantal pointers dat hetzelfde adres kan bevatten. Je kunt ze zo diep ketenen als je nodig hebt. Verander *p, en *r ziet de verandering. Ze kijken allemaal naar dezelfde geheugencel.

Een willekeurig aantal verwijzingen kan naar hetzelfde adres verwijzen.

Dit gedrag is van fundamenteel belang voor de manier waarop pointers werken. Het is geen speciaal geval. Het is de standaard. Als u dit begrijpt, kunt u verwarring bij het debuggen voorkomen. Als u onverwachte waarden ziet, controleer dan of meerdere pointers dezelfde locatie wijzigen. Het is geen magie. Het is gewoon geheugen.