Hoe meerdere pointers een enkel geheugenadres delen in C

2

C heeft een eigenaardigheid die beginners overrompelt, maar complexe systemen aanstuurt. U kunt tientallen verwijzingen naar hetzelfde geheugenadres richten.

Beschouw een eenvoudig geheel getal i. Je kunt drie pointers declareren (p, q en r ) en ze er allemaal aan koppelen.

Dit is geen magie. Het is gewoon adres kopiëren. Wanneer u r = p schrijft, kopieert de compiler het adres dat p bevat naar r. Hetzelfde gebeurt met q.

Nu heeft i vier namen. Het is ‘ik’. Het is *p. Het is *q. Het is *r.

Hier bestaat geen harde grens voor. U kunt honderden verwijzingen hebben die naar hetzelfde stuk RAM verwijzen. Elke variabele is een afzonderlijke variabele in uw code, maar ze worden allemaal omgezet naar exact dezelfde locatie in het geheugen.

Dit is de reden waarom wijzigingen die via één aanwijzer worden aangebracht, van invloed zijn op alle andere. *p wijzigen? De waarde op dat adres verandert ook voor q en r. Het is een direct inzicht in dezelfde gegevens.

Waarom doet dit er toe? Omdat het aliasing toestaat. Uw programma kan dezelfde gegevens door verschillende lenzen bekijken. Eén pointer zou het als een struct kunnen behandelen. Een ander zou het kunnen behandelen als een onbewerkte byte-array. De gegevens veranderen niet. De interpretatie wel.

Deze flexibiliteit is krachtig. Het is ook waar insecten zich verstoppen. Als u niet meer weet welke aanwijzer waar is, overschrijft u mogelijk gegevens die niet de bedoeling waren. Maar onthoud voor nu: verwijzingen zijn slechts adressen. En adressen kunnen worden gedeeld.

Vorig artikelVSDC Gratis video-editor: de beste niet-lineaire bewerkingstool voor Windows voor 4K?
Volgend artikelPinterest: een visuele bladwijzerengine voor uw digitale leven