pointers pointer operations c
Een intensieve studie van aanwijzingen en hun gebruik in C ++.
Een aanwijzer is een van de krachtigste functies van C ++ - taal. Een aanwijzer helpt om de variabelen te manipuleren via zijn adres.
c ++ willekeurig getal tussen 0 en 10
In deze tutorial zullen we alles over pointers en het gebruik ervan in C ++ in detail onderzoeken.
Bekijk hier de eenvoudige C ++ trainingsserie.
Wat je leert:
- Wat is een aanwijzer?
- Aanwijzer Rekenen
- Null- en ongeldige pointers
- Arrays en pointers
- Een reeks aanwijzers
- Wijzer van wijzers
- Aanwijzingen voor functies doorgeven
- Functie-aanwijzingen
- Gevolgtrekking
- Aanbevolen literatuur
Wat is een aanwijzer?
Een pointer is een variabele die het adres van een geheugenlocatie bevat. We weten dat alle variabelen die we declareren een specifiek adres in het geheugen hebben. We declareren een pointervariabele om naar deze adressen in het geheugen te verwijzen.
De algemene syntaxis voor het declareren van een pointervariabele is:
Bijvoorbeeld, de verklaring int * ptr;
Dit betekent dat ptr een pointer is die verwijst naar een variabele van het type int. Daarom bevat een pointervariabele altijd een geheugenlocatie of adres. Laten we de werking van aanwijzervariabelen hieronder bekijken.
Stel dat we de volgende verklaringen hebben:
Ter nagedachtenis zullen deze verklaringen als volgt worden weergegeven:
Dit is de interne weergave van de aanwijzer in het geheugen. Wanneer we de adresvariabele aan de pointervariabele toewijzen, verwijst deze naar de variabele zoals weergegeven in de bovenstaande weergave.
Aangezien ptr het adres variabele p heeft, geeft * ptr de waarde van variabele p (variabele waarnaar de pointervariabele ptr verwijst).
Opmerking: De operator * die we gebruiken met de pointer wordt gebruikt om aan te geven dat het een pointervariabele is.
Laten we enkele van de aanwijzerconcepten bekijken die worden gebruikt in C ++.
Aanwijzer Rekenen
We weten dat een pointervariabele altijd naar het adres in het geheugen verwijst. Onder de bewerkingen die we kunnen uitvoeren, hebben we de volgende rekenkundige bewerkingen die worden uitgevoerd op pointers.
- Operator voor toename (++)
- Operator voor verlagen (-)
- Optellen (+)
- Aftrekken (-)
Laten we eens kijken naar het gebruik van deze bewerkingen in een voorbeeldprogramma.
Uitgang:
Eerste element in de array: 2
volgend element in de array: 4
volgend element in de array: 6
volgend element in de array: 4
volgend element in de array: 2
We hebben de rekenkundige bewerkingen op pointers gezien. Merk op dat de increment-operator ++ de pointer verhoogt en naar het volgende element in de array wijst. Evenzo verlaagt de verlagingsoperator de pointervariabele met 1, zodat deze naar het vorige element in de array verwijst.
We gebruiken ook + en - operators. Ten eerste hebben we 1 toegevoegd aan de pointer-variabele. Het resultaat laat zien dat het naar het volgende element in de array verwijst. Evenzo zorgt de operator - ervoor dat de pointervariabele naar het vorige element in de array wijst.
Naast deze rekenkundige operatoren kunnen we ook vergelijkingsoperatoren gebruiken zoals ==,.
Null- en ongeldige pointers
Als in dat geval aan een pointervariabele geen adres van een variabele is toegewezen, is het een goede gewoonte om een NULL-waarde toe te wijzen aan de pointervariabele. Pointervariabele met een NULL-waarde wordt de NULL-pointer genoemd.
Een null-aanwijzer is een constante aanwijzer waarvan de waarde nul is gedefinieerd in de iostream-header. Het geheugen op adres 0 is gereserveerd door het besturingssysteem en we hebben geen toegang tot deze locatie.
Door de null-aanwijzer te gebruiken, kunnen we het misbruik van ongebruikte aanwijzers vermijden en voorkomen dat aan aanwijzervariabelen enkele afvalwaarden worden toegewezen.
Ongeldige verwijzingen zijn de speciale verwijzingen die naar de waarden zonder type verwijzen. De leegte-aanwijzers zijn flexibeler omdat ze naar elk type kunnen verwijzen. Maar er kan niet rechtstreeks naar worden verwezen. Voor dereferentie moet de lege pointer worden geconverteerd naar een pointer die verwijst naar een waarde met het concrete gegevenstype.
We hebben de werking van de NULL-pointer & ongeldige pointer in het volgende codevoorbeeld laten zien.
Uitgang:
NULL-pointerwaarde: 0
Void pointer vptr wijst naar: A
Ongeldige wijzer vptr wijst naar: 10
In het bovenstaande programma declareren we eerst een integer pointer waaraan een waarde NULL is toegewezen. Als we deze pointer afdrukken, zien we dat de waarde 0 is, zoals we eerder hebben besproken.
Vervolgens verklaren we een ongeldige aanwijzer. Eerst wijzen we een adres of tekenvariabele toe aan deze lege aanwijzer. Vervolgens wijzen we een lege aanwijzer toe aan een tekenaanwijzer en typen we deze met char *. Vervolgens drukken we de charptr-waarde af die naar char A verwijst, wat een karaktervariabele was die we eerder hebben gedeclareerd en wordt aangeduid door de lege pointer.
Vervolgens hebben we een integervariabele aan de leegte-aanwijzer toegewezen en vervolgens voeren we dezelfde stappen uit om deze lege aanwijzer te derefereren door een integer-aanwijzer te gebruiken.
Arrays en pointers
Arrays en pointers zijn sterk met elkaar verbonden. We weten dat de naam van de array naar het eerste element in de array verwijst en dit is een constante pointer.
We kunnen deze pointer toewijzen aan een pointervariabele en vervolgens toegang krijgen tot de array door de pointer te verlagen of door de subscript-operator te gebruiken.
We zullen deze associatie tussen de pointer-variabele en de array zien in het volgende codevoorbeeld.
de standaardgateway is niet beschikbaar windows 10
Uitgang:
1 1 2 3 5
In het bovenstaande programma wijzen we de arraynaam toe aan een pointervariabele. Aangezien de arraynaam naar het eerste element in de array verwijst, kunnen we de inhoud van de hele array afdrukken met behulp van een pointervariabele en deze verhogen met de operator ++. Dit wordt weergegeven in de uitvoer.
Een reeks aanwijzers
Soms hebben we meer dan één pointervariabelen nodig in een programma. In plaats van elke individuele pointervariabele te declareren, kunnen we een reeks pointers declareren.
Laten we meteen een voorbeeld nemen om een reeks aanwijzingen te demonstreren.
Uitgang:
Waarde van myarray (0) = 2
Waarde van myarray (1) = 4
Waarde van myarray (2) = 6
Waarde van myarray (3) = 8
Waarde van myarray (4) = 10
In de verklaring hierboven,
int * ptr (5);
We kunnen interpreteren als; ptr is een array van 5 geheeltallige pointers. Daarom verwijst elk element van ptr naar een variabele van het type integer.
We maken gebruik van een integer-array en wijzen het adres van elk element van de array toe aan elk van de ptr-elementen. Vervolgens tonen we de inhoud van de ptr-array door '* ptr (i)' uit te voeren.
Wijzer van wijzers
De aanwijzer van wijzers is niets anders dan meerdere indirecte reacties. Het is een soort reeks aanwijzingen. Wanneer we een pointer van pointers definiëren, heeft de eerste pointer een adres van de tweede pointer, die op zijn beurt het adres heeft van de variabele waarnaar hij verwijst.
Ter nagedachtenis wordt dit weergegeven als:
Een pointer van pointers wordt als volgt gedeclareerd:
We nemen direct een codevoorbeeld om de aanwijzer van wijzers beter te begrijpen.
Uitgang:
Variabele var: 10
Wijzer naar variabele: 10
Pointer naar Pointer naar een variabele: 10
In het bovenstaande programma declareren we een integer-variabele, een integer-pointer en een pointer van een pointer naar een integer. Zoals weergegeven in het programma, krijgt de pointervariabele de waarde van een variabele toegewezen. De pointer van de pointervariabele krijgt het adres van de pointervariabele toegewezen.
Uiteindelijk drukken we de drie variabelen af die dezelfde waarde 10 weergeven, gelijk aan een integer-variabele.
Aanwijzingen voor functies doorgeven
Het doorgeven van pointers aan de functie is hetzelfde als andere technieken voor het doorgeven van parameters waarbij we pointervariabelen doorgeven aan de functie.
We gaan terug naar het omwisselen van twee waarden en passen deze aan om pointervariabelen als parameters door te geven.
Uitgang:
Voer de te wisselen waarden in: 3 2
a = 3 b = 2
Verwisselde waarden
a = 2 b = 3
Zoals getoond in het programma, geven we de waarden die moeten worden omgewisseld door als integer-variabelen. De formele parameters worden gedefinieerd als pointervariabelen. Als gevolg hiervan worden de wijzigingen die aan de variabelen binnen de functies worden aangebracht, ook buiten in de aanroepende functie weerspiegeld.
Functie-aanwijzingen
op dezelfde manier, zoals we verwijzingen naar variabelen, arrays, enz. hebben, kunnen we ook verwijzingen naar functies hebben. Maar het verschil is dat de functieaanwijzer naar de uitvoerbare code verwijst en niet naar gegevens zoals variabelen of arrays.
We nemen een voorbeeld om functie-aanwijzingen te demonstreren.
Uitgang:
Waarde van a is 100
vanilla world of warcraft privéserver
In het bovenstaande programma hebben we een functie ‘displayVal’ die alleen een geheel getal afdrukt dat eraan is doorgegeven. In de hoofdfunctie hebben we een functiepointer ‘func_ptr’ gedefinieerd die een int als argument neemt en een leegte retourneert.
leegte (* func_ptr) (int)
Opmerking: We moeten de functie-aanwijzer binnen () plaatsen. Als we het weglaten, wordt het een functie-prototype.
We hebben het adres van de functie ‘displayVal’ toegewezen aan deze functiepointer. Met behulp van deze functie pointer ‘func_ptr’ geven we de argumentwaarde 100 door die equivalent is aan het aanroepen van displayVal met argument 100.
Als we nu een andere functie hebben met hetzelfde prototype, dan kunnen we dezelfde functiepointer gebruiken door het adres van de functie eraan toe te wijzen. Dit is het belangrijkste gebruik van functie-aanwijzers.
Gevolgtrekking
Dit gaat allemaal over de aanwijzingen, de definities en het gebruik in C ++.
In onze volgende tutorial zullen we meer leren over referenties in C ++. Verwijzingen hebben ook speciaal gebruik in C ++ en worden vaak gebruikt als aliassen voor variabelen.
Klik hier voor de Absolute C ++ trainingsserie.