Meerdere aanwijzers die naar hetzelfde adres wijzen in C

8

C maakt het mogelijk dat een enkele geheugenlocatie meerdere aliassen heeft. U kunt meerdere pointers declareren en ze allemaal naar dezelfde variabele laten verwijzen. Dit is niet alleen een eigenaardigheid van de taal. Het is een fundamentele functie die de manier verandert waarop u geheugen en gegevenstoegang beheert.

Overweeg dit scenario. U hebt meerdere handvatten nodig voor dezelfde gehele variabele. U kunt ze allemaal aangeven en direct aan elkaar koppelen.

In dit blok zijn p, q en r allemaal integer-pointers. Ze wijzen allemaal naar ‘i’. De toewijzing r = p kopieert niet de waarde van i. Het kopieert het adres dat is opgeslagen in p. Omdat p het adres van i bevat, bevat r nu ook het adres van i.

Eén variabele, veel namen

Na uitvoering is er één integer-variabele i in het geheugen. Maar er zijn vier manieren om naar die exacte gegevens te verwijzen.

  1. i : De oorspronkelijke variabelenaam.
  2. *p : De waarde op het adres in p.
  3. *q : De waarde op het adres in q.
  4. *r : De waarde op het adres in r.

Ze zijn identiek. Verander ‘ik’. *p verandert. Wijzig *q. ‘ik’ verandert. De gegevens bevinden zich op één adres. De verwijzingen zijn slechts labels.

Er is geen harde limiet voor het aantal pointers dat hetzelfde adres kan bevatten. Je kunt ze voor onbepaalde tijd aan elkaar koppelen. a = &i; b = een; c = b; d = c; werkt op dezelfde manier. Elke toewijzing kopieert de pointerwaarde. Er wordt geen nieuwe kopie van de gegevens gemaakt.

“Een willekeurig aantal verwijzingen kan naar hetzelfde adres verwijzen.”

Deze mogelijkheid is krachtig voor het doorgeven van referenties rond functies of het bouwen van gekoppelde structuren. Het houdt uw geheugengebruik strak. Het introduceert ook een risico. Als u een van deze pointers derefereert, raakt u dezelfde onderliggende byte aan. Fouten in één alias rimpelen naar allemaal. Maar bij correct gebruik is deze functie een standaard C-praktijk.