Wijzen zijn de nachtmerries van elke nieuwe C-programmeur. Ze zijn echter ook de functie waardoor C de wijdverspreide, krachtige programmeertaal is die het tot op heden is. Net als veel andere programmeerfuncties en constructies, is er een systematische benadering voor het maken en gebruiken van C-aanwijzers. Dit artikel is een stapsgewijze handleiding voor het maken en gebruiken van aanwijzingen op een duidelijke en eenvoudige manier.
Voorwaarde Informatie
- Pointers zijn variabelen die het adres van een geheugenlocatie in het algemeen bevatten (deze geheugenlocatie kan de gegevens van de variabele bevatten of nog niet toegewezen zijn).
- Verwijzingen zijn variabelen die het geheugenadres van een andere variabele bevatten.
- Het belangrijkste verschil tussen een verwijzing en een aanwijzer is dat verwijzingen naar toegewezen geheugenlocaties terwijl verwijzingen kunnen wijzen naar niet-toegewezen geheugenlocaties.
- Er is een verschil tussen de adresoperator (gebruikt op variabelen om hun adres in het geheugen op te geven), de referentie-declaratieoperator (gebruikt in een referentiedeclaratie om aan te geven dat de gedeclareerde variabele een referentie is) en de bit-wise "en" -operator, allemaal met hetzelfde symbool (&)
- Aanwijzers kunnen worden verhoogd en verlaagd (waardoor u de locatie kunt wijzigen waarnaar de aanwijzer wijst).
- Aanwijzers kunnen op een van de volgende manieren worden toegewezen:
- Een verwijzing naar de aanwijzer toewijzen, waardoor de aanwijzer naar dezelfde locatie in het geheugen verwijst als de referentie.
- Het toewijzen van een andere aanwijzer van hetzelfde type aan de aanwijzer, waardoor beide aanwijzers naar dezelfde locatie wijzen.
- Door een numerieke waarde toe te wijzen aan de aanwijzer (in hexadecimale notatie), wijst de aanwijzer naar de specifieke geheugenlocatie die door dat cijfer wordt geadresseerd.
- Het toewijzen van het adres van een variabele van het type aanwijzer aan de aanwijzer, waardoor de aanwijzer naar de geheugenlocatie van de eerste byte van de binaire representatie van de variabele in het geheugen wijst.
- Referenties kunnen worden toegewezen met behulp van een van de volgende methoden:
- Een andere verwijzing naar de referentie toewijzen.
- Als u een variabele van hetzelfde type als de referentie toewijst, wordt het referentiepunt naar de variabele verwezen.
- Aanwijzers en verwijzingen hebben gegevenstypen, waarmee het type gegevens wordt aangegeven waarnaar de aanwijzer / referentie verwijst.
- Het type van een verwijzing beperkt de toewijzing van die verwijzing naar variabelen / referenties van datzelfde gegevenstype. Als we bijvoorbeeld een geheel getalverwijzing (int & d;) declareren, kunnen we alleen een andere geheel getalreferentie of een integer-variabele aan die referentie toewijzen (int i = 0; d = i;)
- Het type aanwijzer beperkt de toewijzing van de aanwijzer aan verwijzingen, adressen van variabelen / aanwijzers van datzelfde gegevenstype. Het heeft ook invloed op het ophalen van gegevens waarnaar wordt verwezen, zodat een geheel getal aanwijzer een aantal bytes zal ophalen dat gelijk is aan het aantal bytes dat is opgenomen door een geheel getal op het systeem. Ook beïnvloedt de keuze van het gegevenstype de manier waarop wijzers worden verhoogd en verlaagd. Wanneer een aanwijzer wordt opgehoogd, wijst deze naar de volgende gegevenstype-waarde van de huidige locatie. Als een geheel getal bijvoorbeeld 4 bytes in het geheugen in beslag neemt, wordt door het verhogen van een geheel getal aanwijzer het volgende gehele getal aangegeven, dat 4 bytes na de huidige locatie is en dus wordt de waarde van de aanwijzer zelf verhoogd met veelvouden van 4.
- Array-variabelenamen worden beschouwd als statische / constante wijzers die naar de eerste byte van het eerste item in de array wijzen en van hetzelfde type als de arrayitems hebben.
Stappen
-
1 Bepaal het type aanwijzer (dat wil zeggen, het type gegevens waar de aanwijzer naar wijst). De volgende tips kunnen helpen:
- Als u een dynamische array declareert, gebruikt u het gegevenstype van de array-items.
- Als u de aanwijzer declareert om toegang te krijgen tot de gegevens van een variabele, gebruikt u hetzelfde gegevenstype als de variabele.
- Als u de aanwijzer declareert om een lijststructuur te doorlopen, gebruikt u het gegevenstype van het lijstknooppunt (meestal een aangemaakte gebruiker struct).
- Als u de aanwijzer de opdracht geeft een boom te doorkruisen, gebruikt u het gegevenstype van het boomknooppunt of een aanwijzer naar het type boomknooppunt als het type (aanwijzer naar een aanwijzer van het type boomknooppunt!).
-
2 Verklaar de aanwijzer met een syntaxis als deze: data type * pointer-identifier; waar
- data type is het type dat je hebt gekozen in stap 1
- pointer-identificator is de identifier of naam van de pointer variabele
-
3 Wijs de aanwijzer toe aan een initiële geheugenlocatie. Dit kan op een van de volgende manieren worden gedaan:
- Geheugen toewijzen en ernaar wijzen door de aanwijzer: int * i = malloc(De grootte van(int) * N); waarbij n het aantal geheugenblokken is dat moet worden toegewezen.
- Het adres van een variabele toewijzen aan de aanwijzer: int * i = & x; waarbij "x" een geheel getal is en (&) betekent adres-van.
- Een array-id toewijzen aan de aanwijzer: int * i = array1; waarbij array1 een geheel getal is (int[] array1;).
- Een verwijzing naar de aanwijzer toewijzen: int * i = a; waar "a" een geheel getal is (int & een;).
- Een andere pointer toewijzen aan de aanwijzer: int * i = z; waar "z" een andere integer pointer is (int * z;)
-
4 Wanneer u het gegevensitem wilt ophalen waarnaar momenteel door de aanwijzer wordt verwezen, gebruikt u de operator value-at-address (*): int x = * i; waar ik een integer pointer is.
-
5 Gebruik de indexeeroperator op de aanwijzer alsof het een array is wanneer u een geheugenlocatie naast de aanwijzer wilt krijgen zonder de aanwijzer daadwerkelijk te verplaatsen. Als u bijvoorbeeld een geheel getal pointer i hebt, kunt u i [2] gebruiken, waarmee het gehele getal na het gehele getal wordt opgehaald onmiddellijk na het gehele getal waarnaar wordt verwezen door de verwijzing (het gehele getal dat 2 gehele getallen is na de huidige locatie). De aanwijzer zal ik nog steeds naar dezelfde geheugenlocatie wijzen.Een ander alternatief hiervoor is om de waarde aan de aanwijzer 2 stappen na deze aanwijzer te krijgen: * (i + 2)
-
6 Gebruik de operator Increment (++), decrement (-), + = en - = wanneer u de huidige locatie moet wijzigen. i + = 5; zal de integer pointer i 5 integers naar voren verplaatsen.
-
7 Nadat u de aanwijzer hebt gebruikt, moet u, als u geheugen aan die aanwijzer hebt toegewezen, het toegewezen geheugen vrijmaken met behulp van de functie free (). (gratis (i); waarbij i een aanwijzer is)
Facebook
Twitter
Google+