Met C kun je chaos of helderheid creëren met geheugen. Je kunt tientallen verwijzingen hebben die allemaal op exact dezelfde plek in het RAM gericht zijn. Dit is geen bug. Het is een functie.
Beschouw een scenario waarin u een geheel getal i declareert. Vervolgens maakt u drie integer-pointers: p, q en r.
De code doet precies wat je zou verwachten. p pakt het adres van i. q doet hetzelfde. r kopieert wat p vasthoudt. Omdat p het adres van i bevat, verwijst r ook naar i.
Nadat deze toewijzingen zijn uitgevoerd, hebt u één variabele met vier namen. ‘ik’ is het origineel. *p heeft er toegang toe. *q heeft er toegang toe. *r heeft er toegang toe.
Hoe aanwijzertoewijzing werkt
De sleutel hier is begrijpen wat er tijdens de opdracht gebeurt. Wanneer u q = &i schrijft, kopieert u niet de waarde van i. Je kopieert de locatie van i.
Als je r = p schrijft, kopieer je het adres van p naar r. Er wordt geen nieuw geheugen toegewezen. Er worden geen gegevens gedupliceerd. De adreswaarde beweegt van de ene pointervariabele naar de andere.
Dit betekent dat er geen harde limiet is voor het aantal pointers dat hetzelfde adres kan bevatten. Je kunt duizend verwijzingen maken die allemaal naar ‘i’ verwijzen. Ze verwijzen allemaal naar dezelfde geheugenlocatie.
Er is geen limiet op het aantal pointers dat hetzelfde adres kan bevatten (en dus naar dat adres kan verwijzen).
Dit gedrag is van fundamenteel belang voor de manier waarop C geheugen beheert. Het maakt flexibele datastructuren mogelijk, zoals gekoppelde lijsten en bomen. Het maakt ook efficiënte functieargumenten mogelijk. Geef een aanwijzer door in plaats van een kopie. Wijzig de originele gegevens rechtstreeks.
Maar het introduceert ook risico’s. Verander ‘i’ via ‘p’. Kijk naar ‘i’ tot en met ‘q’. De verandering is overal zichtbaar. Er is maar één bron van waarheid.
De variabele i heeft nu vier namen. ik. *p. *q. *r.
Dit is hoe C werkt. U heeft directe toegang tot geheugenadressen. U kunt gegevens vrijelijk van een alias voorzien. Je moet alleen voorzichtig zijn met wat je verandert.




























