Wat zijn aanwijzingen?
In C ++ verwijst een pointer naar een variabele die het adres van een andere variabele bevat. Net als gewone variabelen hebben pointers een gegevenstype. Een aanwijzer van het type integer kan bijvoorbeeld het adres bevatten van een variabele van het type integer. Een aanwijzer van het tekentype kan het adres van een variabele van het tekentype bevatten.
U zou een aanwijzer moeten zien als een symbolische weergave van een geheugenadres. Met pointers kunnen programma's call-by-reference simuleren. Ze kunnen ook dynamische datastructuren creëren en manipuleren. In C ++ verwijst een pointervariabele naar een variabele die verwijst naar een specifiek adres in een geheugen dat wordt aangewezen door een andere variabele.
In deze C ++ tutorial leer je:
- Wat zijn aanwijzingen?
- Adressen in C ++
- Syntaxis van aanwijzerverklaring
- Referentie-operator (&) en Deference-operator (*)
- Aanwijzers en arrays
- Nul punten
- Aanwijzers van variabelen
- Toepassing van Pointers
- Voordelen van het gebruik van Pointers
Adressen in C ++
Om C ++ - verwijzingen te begrijpen, moet u begrijpen hoe computers gegevens opslaan.
Wanneer u een variabele in uw C ++ -programma maakt, krijgt deze wat ruimte in het computergeheugen toegewezen. De waarde van deze variabele wordt opgeslagen op de toegewezen locatie.
Om de locatie in het computergeheugen te weten waar de gegevens zijn opgeslagen, biedt C ++ de & (referentie) operator. De operator retourneert het adres dat een variabele bezet.
Als x bijvoorbeeld een variabele is, retourneert & x het adres van de variabele.
Syntaxis van aanwijzerverklaring
De declaratie van C ++ heeft de volgende syntaxis:
datatype *variable_name;
- Het datatype is het basistype van de aanwijzer die een geldig C ++ -gegevenstype moet zijn.
- De variabele_naam is de naam van de pointervariabele.
- Asterisk die hierboven wordt gebruikt voor pointer-declaratie is vergelijkbaar met asterisk die wordt gebruikt om vermenigvuldiging uit te voeren. Het is de asterisk die de variabele als een pointer markeert.
Hier is een voorbeeld van geldige pointer-declaraties in C ++:
int *x; // a pointer to integerdouble *x; // a pointer to doublefloat *x; // a pointer to floatchar *ch // a pointer to a character
Referentie-operator (&) en Deference-operator (*)
De verwijzingsoperator (&) retourneert het adres van de variabele.
De dereferentie-operator (*) helpt ons de waarde te verkrijgen die in een geheugenadres is opgeslagen.
Bijvoorbeeld:
Als we een variabele de naam num hebben, opgeslagen in het adres 0x234 en de waarde 28 opslaan.
De referentie-operator (&) retourneert 0x234.
De dereferentie-operator (*) retourneert 5.
Voorbeeld 1:
#includeusing namespace std;int main() {int x = 27;int *ip;ip = &x;cout << "Value of x is : ";cout << x << endl;cout << "Value of ip is : ";cout << ip<< endl;cout << "Value of *ip is : ";cout << *ip << endl;return 0;}
Uitgang:
Hoe dit werkt:
Hier is een screenshot van de code:
Code Verklaring:
- Importeer het iostream-headerbestand. Hierdoor kunnen we de functies gebruiken die zijn gedefinieerd in het header-bestand zonder fouten te krijgen.
- Voeg de std-naamruimte toe om zijn klassen te gebruiken zonder deze op te roepen.
- Roep de functie main () aan. De programmalogica moet worden toegevoegd in de body van deze functie. De {markeert het begin van de hoofdtekst van de functie.
- Declareer een integer variabele x en wijs er een waarde van 27 aan toe.
- Declareer een pointervariabele * ip.
- Sla het adres van variabele x op in de pointervariabele.
- Druk wat tekst af op de console.
- Druk de waarde van variabele x op het scherm af.
- Druk wat tekst af op de console.
- Druk het adres van variabele x af. De waarde van het adres is opgeslagen in de variabele ip.
- Druk wat tekst af op de console.
- Afdrukwaarde van opgeslagen op het adres van de aanwijzer.
- Het programma zou waarde moeten retourneren bij succesvolle uitvoering.
- Einde van de hoofdtekst van de functie main ().
Aanwijzers en arrays
Arrays en pointers werken op basis van een gerelateerd concept. Er zijn verschillende dingen waar u op moet letten bij het werken met arrays met pointers. De arraynaam zelf geeft het basisadres van de array aan. Dit betekent dat u geen en-teken (&) moet gebruiken om het adres van een array aan een pointer toe te wijzen.
Bijvoorbeeld:
p = arr;
Het bovenstaande is correct aangezien arr het adres van de arrays vertegenwoordigt. Hier is nog een voorbeeld:
p = &arr;
Het bovenstaande is niet juist.
We kunnen een array impliciet omzetten in een pointer. Bijvoorbeeld:
int arr [20];int * ip;
Hieronder staat een geldige bewerking:
ip = arr;
Na de bovenstaande verklaring zullen ip en arr gelijk zijn en zullen ze eigendommen delen. Er kan echter een ander adres aan ip worden toegewezen, maar we kunnen niets aan arr.
Voorbeeld 2:
Dit voorbeeld laat zien hoe u door een array kunt bladeren met behulp van pointers:
#includeusing namespace std;int main() {int *ip;int arr[] = { 10, 34, 13, 76, 5, 46 };ip = arr;for (int x = 0; x < 6; x++) {cout << *ip << endl;ip++;}return 0;}
Uitgang:
Hier is een screenshot van de code:
Code Verklaring:
- Declareer een integer pointer variabele ip.
- Declareer een array met de naam arr en sla er 6 gehele getallen in op.
- Wijs arr toe aan ip. De ip en arr worden gelijkwaardig.
- Maak een voor een lus. De lusvariabele x is gemaakt om de array-elementen van index 0 tot 5 te herhalen.
- Druk de waarden af die zijn opgeslagen op het adres van de aanwijzer-IP. Per iteratie wordt één waarde geretourneerd en in totaal worden 6 herhalingen uitgevoerd. De endl is een C ++ -zoekwoord dat de eindregel betekent. Met deze actie kunt u de cursor naar de volgende regel verplaatsen nadat elke waarde is afgedrukt. Elke waarde wordt op een afzonderlijke regel afgedrukt.
- Om de aanwijzer na elke iteratie naar de volgende int-positie te verplaatsen.
- Einde van een lus.
- Het programma moet iets teruggeven bij een succesvolle uitvoering.
- Einde van de hoofdtekst () functie.
Nul punten
Als er geen exact adres is dat moet worden toegewezen, kan aan de pointervariabele een NULL worden toegewezen. Het moet tijdens de aangifte worden gedaan. Zo'n aanwijzer staat bekend als een nul-aanwijzer. De waarde is nul en wordt gedefinieerd in veel standaardbibliotheken zoals iostream.
Voorbeeld 3:
#includeusing namespace std;int main() {int *ip = NULL;cout << "Value of ip is: " << ip;return 0;}
Uitgang:
Hier is een screenshot van de code:
Code Verklaring:
- Declareer een pointervariabele ip en wijs er de waarde NULL aan toe.
- Druk de waarde van de pointervariabele ip af naast wat tekst op de console.
- Het programma moet waarde teruggeven na succesvolle voltooiing.
- Einde van de hoofdtekst van de functie main ().
Aanwijzers van variabelen
Met C ++ kunt u gegevens rechtstreeks uit het computergeheugen manipuleren.
De geheugenruimte kan naar wens worden toegewezen of opnieuw worden toegewezen. Dit wordt mogelijk gemaakt door Pointer-variabelen.
Pointervariabelen verwijzen naar een specifiek adres in het geheugen van de computer waarnaar wordt verwezen door een andere variabele.
Het kan als volgt worden verklaard:
int *p;
Of,
int* p;
In het u-voorbeeld hebben we de pointervariabele p gedeclareerd.
Het zal een geheugenadres bevatten.
De asterisk is de dereferentie-operator die een verwijzing naar betekent.
De pointer p wijst naar een geheel getal in het geheugenadres.
Voorbeeld 4:
#includeusing namespace std;int main() {int *p, x = 30;p = &x;cout << "Value of x is: " << *p;return 0;}
Uitgang:
Hier is een screenshot van de code:
Code Verklaring:
- Declareer een pointervariabele p en een variabele x met een waarde van 30.
- Wijs het adres van variabele x toe aan p.
- Druk de waarde van pointervariabele p af naast wat tekst op de console.
- Het programma moet waarde teruggeven na succesvolle voltooiing.
- Einde van de hoofdtekst van de functie main ().
Toepassing van Pointers
Functies in C ++ kunnen slechts één waarde retourneren. Verder worden alle variabelen die in een functie zijn gedeclareerd, toegewezen aan de functieaanroepstapel. Zodra de functie terugkeert, worden alle stapelvariabelen vernietigd.
Functioneringsargumenten worden op waarde doorgegeven en elke wijziging die op de variabelen wordt aangebracht, verandert de waarde van de feitelijke variabelen die worden doorgegeven niet. Het volgende voorbeeld illustreert dit concept: -
Voorbeeld 5:
#includeusing namespace std;void test(int*, int*);int main() {int a = 5, b = 5;cout << "Before changing: << endl;cout << "a = " << a << endl;cout << "b = " << b << endl;test(&a, &b);cout << "\nAfter changing" << endl;cout << "a = " << a << endl;cout << "b = " << b << endl;return 0;}void test(int* n1, int* n2) {*n1 = 10;*n2 = 11;}
Uitgang:
Hier is een screenshot van de code:
Code Verklaring:
- Maak een prototype van een functie met de naam test waaraan twee integer-parameters moeten voldoen.
- Roep de functie main () aan. We zullen de programmalogica in zijn lichaam toevoegen.
- Declareer twee integer-variabelen a en b, elk met een waarde van 5.
- Druk wat tekst af op de console. De endl (eindregel) zal de cursor verplaatsen om op de volgende regel te beginnen met afdrukken.
- Druk de waarde van variabele a af op de console naast andere tekst. De endl (eindregel) zal de cursor verplaatsen om op de volgende regel te beginnen met afdrukken.
- Druk de waarde van variabele b op de console af naast andere tekst. De endl (eindregel) zal de cursor verplaatsen om op de volgende regel te beginnen met afdrukken.
- Maak een functie met de naam test () die de adressen van variabele a en b als parameters opneemt.
- Druk wat tekst af op de console. De \ n zal een nieuwe lege regel maken voordat de tekst wordt afgedrukt. De endl (eindregel) verplaatst de cursor om te beginnen met afdrukken op de volgende regel nadat de tekst is afgedrukt.
- Druk de waarde van variabele a af op de console naast andere tekst. De endl (eindregel) zal de cursor verplaatsen om op de volgende regel te beginnen met afdrukken.
- Druk de waarde van variabele b op de console af naast andere tekst. De endl (eindregel) zal de cursor verplaatsen om op de volgende regel te beginnen met afdrukken.
- Het programma moet waarde teruggeven na succesvolle voltooiing.
- Einde van de hoofdtekst van de functie main ().
- De functietest () definiëren. De functie moet twee integer pointer-variabelen * n1 en * n2 hebben.
- Wijs aan de pointervariabele * n1 de waarde 10 toe.
- Wijs de pointervariabele * n2 een waarde van 11 toe.
- Einde van de hoofdtekst van de functietest ().
Hoewel er nieuwe waarden worden toegewezen aan variabele a en b binnen de functietest, wordt hetzelfde niet weerspiegeld in de buitenste functie main.
Het gebruik van aanwijzers als functieargumenten helpt om het werkelijke adres van de variabele in de functie door te geven, en alle wijzigingen die op de variabele worden uitgevoerd, worden weerspiegeld in de buitenste functie.
In het bovenstaande geval heeft de functie 'test' het adres van de variabelen 'a' en 'b'. Deze twee variabelen zijn direct toegankelijk vanuit de functie 'test', en daarom wordt elke wijziging die aan deze variabelen wordt aangebracht, weerspiegeld in de aanroepfunctie 'main'.
Voordelen van het gebruik van Pointers
Hier zijn de voor- / voordelen van het gebruik van Pointers
- Pointers zijn variabelen die het adres van andere variabelen in C ++ opslaan.
- Meer dan één variabele kan worden gewijzigd en geretourneerd door de functie met behulp van pointers.
- Geheugen kan dynamisch worden toegewezen en weer worden toegewezen met behulp van pointers.
- Aanwijzingen helpen bij het vereenvoudigen van de complexiteit van het programma.
- De uitvoeringssnelheid van een programma wordt verbeterd door gebruik te maken van pointers.
Overzicht:
- Een pointer verwijst naar een variabel houdadres van een andere variabele.
- Elke aanwijzer heeft een geldig gegevenstype.
- Een aanwijzer is een symbolische weergave van een geheugenadres.
- Met pointers kunnen programma's call-by-reference simuleren en dynamische datastructuren creëren en manipuleren.
- Arrays en pointers gebruiken een gerelateerd concept.
- De arraynaam geeft de basis van de array aan.
- Als u het adres van een array aan een pointer wilt toewijzen, gebruik dan geen en-teken (&).
- Als er geen specifiek adres is om een pointervariabele toe te wijzen, wijs er dan een NULL aan toe.