C ++ markører med eksempler

Indholdsfortegnelse:

Anonim

Hvad er henvisninger?

I C ++ henviser en markør til en variabel, der indeholder adressen på en anden variabel. Ligesom almindelige variabler har markører en datatype. For eksempel kan en markør af typen heltal indeholde adressen på en variabel af typen heltal. En markør af karaktertype kan indeholde adressen på en variabel af karaktertypen.

Du skal se en markør som en symbolsk repræsentation af en hukommelsesadresse. Med pegepinde kan programmer simulere kald-til-reference. De kan også oprette og manipulere dynamiske datastrukturer. I C ++ henviser en markørvariabel til en variabel, der peger på en bestemt adresse i en hukommelse, der peges af en anden variabel.

I denne C ++ tutorial lærer du:

  • Hvad er henvisninger?
  • Adresser i C ++
  • Pointer Declaration Syntax
  • Referenceoperatør (&) og Udskydelsesoperator (*)
  • Tip og arrays
  • NULL-markør
  • Tip til variabler
  • Anvendelse af markører
  • Fordele ved at bruge markører

Adresser i C ++

For at forstå C ++ -pegere skal du forstå, hvordan computere lagrer data.

Når du opretter en variabel i dit C ++ - program, tildeles den noget plads til computerens hukommelse. Værdien af ​​denne variabel er gemt på den tildelte placering.

For at kende placeringen i computerens hukommelse, hvor dataene er gemt, leverer C ++ & (reference) operatøren. Operatøren returnerer den adresse, som en variabel indtager.

For eksempel, hvis x er en variabel, returnerer & x adressen på variablen.

Pointer Declaration Syntax

Erklæringen af ​​C ++ tager følgende syntaks:

datatype *variable_name;
  • Datatypen er basistypen for markøren, som skal være en gyldig C ++ - datatype.
  • Variablenavnet skal være navnet på markørvariablen.
  • Asterisk, der er brugt ovenfor til markørerklæring, svarer til en stjerne, der bruges til at udføre multiplikationshandling. Det er stjernen, der markerer variablen som en markør.

Her er et eksempel på gyldige markørerklæringer i C ++:

int *x; // a pointer to integerdouble *x; // a pointer to doublefloat *x; // a pointer to floatchar *ch // a pointer to a character

Referenceoperatør (&) og Udskydelsesoperator (*)

Referenceoperatoren (&) returnerer variabelens adresse.

Dereferensoperatøren (*) hjælper os med at få den værdi, der er gemt i en hukommelsesadresse.

For eksempel:

Hvis vi har en variabel med navnet num, gemt i adressen 0x234 og lagring af værdien 28.

Referenceoperatoren (&) returnerer 0x234.

Dereferensoperatøren (*) returnerer 5.

Eksempel 1:

#include using 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;}

Produktion:

Sådan fungerer dette:

Her er et screenshot af koden:

Kode Forklaring:

  1. Importer iostream-headerfilen. Dette giver os mulighed for at bruge de funktioner, der er defineret i headerfilen uden at få fejl.
  2. Inkluder std navneområdet for at bruge dets klasser uden at kalde det.
  3. Ring til hovedfunktionen (). Programmets logik skal tilføjes inden for denne funktion. {Markerer begyndelsen på funktionens krop.
  4. Erklær en heltalsvariabel x og tildel den en værdi på 27.
  5. Erklare en markørvariabel * ip.
  6. Gem adressen på variablen x i markørvariablen.
  7. Udskriv tekst på konsollen.
  8. Udskriv værdien af ​​variabel x på skærmen.
  9. Udskriv tekst på konsollen.
  10. Udskriv adressen på variablen x. Adressens værdi blev gemt i variablen ip.
  11. Udskriv tekst på konsollen.
  12. Udskrivningsværdi for gemt på markørens adresse.
  13. Programmet skal returnere værdi efter vellykket udførelse.
  14. Slutningen af ​​hovedfunktionens () krop.

Tip og arrays

Arrays og pegepinde fungerer ud fra et relateret koncept. Der er forskellige ting at bemærke, når man arbejder med arrays, der har pegepinde. Selve arraynavnet angiver arrayets basisadresse. Dette betyder, at du ikke skal bruge et ampersand (&) for at tildele en matrix adresse til en markør.

For eksempel:

p = arr;

Ovenstående er korrekt, da arr repræsenterer arrays 'adresse. Her er et andet eksempel:

p = &arr;

Ovenstående er forkert.

Vi kan implicit konvertere en matrix til en markør. For eksempel:

int arr [20];int * ip;

Nedenfor er en gyldig handling:

ip = arr;

Efter ovenstående erklæring vil ip og arr være ækvivalente, og de deler egenskaber. Dog kan en anden adresse tildeles ip, men vi kan ikke tildele noget til arr.

Eksempel 2:

Dette eksempel viser, hvordan man krydser en matrix ved hjælp af markører:

#include using 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;}

Produktion:

Her er et screenshot af koden:

Kode Forklaring:

  1. Erklare en heltal pointervariabel ip.
  2. Erklær en matrix med navnet arr, og gem 6 heltal i den.
  3. Tildel arr til ip. IP og arr bliver ækvivalente.
  4. Opret en til en løkke. Loop-variablen x blev oprettet for at gentage array-elementerne fra indeks 0 til 5.
  5. Udskriv de værdier, der er gemt på adressen til markørens IP. Én værdi returneres pr. Iteration, og i alt 6 gentagelser udføres. Endl er et C ++ nøgleord, der betyder slutningen. Denne handling giver dig mulighed for at flytte markøren til den næste linje, efter at hver værdi er udskrevet. Hver værdi udskrives på en individuel linje.
  6. At flytte markøren til næste int-position efter hver iteration.
  7. Slutningen af ​​for en løkke.
  8. Programmet skal returnere noget efter vellykket udførelse.
  9. Slutningen af ​​hovedfunktionsorganet ().

NULL-markør

Hvis der ikke er nogen nøjagtig adresse, der skal tildeles, kan markørvariablen tildeles en NULL. Det skal gøres under erklæringen. En sådan markør er kendt som en nulmarkør. Dens værdi er nul og er defineret i mange standardbiblioteker som iostream.

Eksempel 3:

#include using namespace std;int main() {int *ip = NULL;cout << "Value of ip is: " << ip;return 0;}

Produktion:

Her er et screenshot af koden:

Kode Forklaring:

  1. Erklær en markørvariabel ip og tildel den en værdi på NULL.
  2. Udskrivningsværdi af pointervariabel ip sammen med noget tekst på konsollen.
  3. Programmet skal returnere værdi efter vellykket afslutning.
  4. Slutningen af ​​hovedfunktionens () krop.

Tip til variabler

Med C ++ kan du manipulere data direkte fra computerens hukommelse.

Hukommelsespladsen kan tildeles eller tildeles igen, som man ønsker det. Dette er muliggjort af pointervariabler.

Markørvariabler peger på en bestemt adresse i computerens hukommelse, som en anden variabel peger på.

Det kan erklæres som følger:

int *p;

Eller,

int* p;

I dig-eksemplet har vi deklareret markørvariablen p.

Den indeholder en hukommelsesadresse.

Stjernen er den derference-operator, der betyder en markør til.

Markøren p peger på et heltal i hukommelsesadressen.

Eksempel 4:

#include using namespace std;int main() {int *p, x = 30;p = &x;cout << "Value of x is: " << *p;return 0;}

Produktion:

Her er et screenshot af koden:

Kode Forklaring:

  1. Erklær en markørvariabel p og en variabel x med en værdi på 30.
  2. Tildel adressen på variablen x til p.
  3. Udskriv værdien af ​​markørvariablen p sammen med noget tekst på konsollen.
  4. Programmet skal returnere værdi efter vellykket afslutning.
  5. Slutningen af ​​hovedfunktionens () krop.

Anvendelse af markører

Funktioner i C ++ kan kun returnere en værdi. Yderligere tildeles alle variabler, der er deklareret i en funktion, på funktionskaldestakken. Så snart funktionen vender tilbage, ødelægges alle stackvariablerne.

Argumenter til funktion sendes efter værdi, og enhver ændring foretaget på variablerne ændrer ikke værdien af ​​de faktiske variabler, der sendes. Følgende eksempel hjælper med at illustrere dette koncept: -

Eksempel 5:

#include using 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;}

Produktion:

Her er et screenshot af koden:

Kode Forklaring:

  1. Opret en prototype af en funktion med navnet test, der tager to heltalsparametre.
  2. Ring til hovedfunktionen (). Vi tilføjer programlogikken inde i dens krop.
  3. Erklær to heltalsvariabler a og b, hver med en værdi på 5.
  4. Udskriv tekst på konsollen. Endl (slutlinje) flytter markøren for at begynde udskrivning i næste linje.
  5. Udskriv værdien af ​​variabel a på konsollen sammen med anden tekst. Endl (slutlinie) flytter markøren for at begynde at udskrive i den næste linje.
  6. Udskriv værdien af ​​variabel b på konsollen sammen med anden tekst. Endl (slutlinie) flytter markøren for at begynde at udskrive i den næste linje.
  7. Opret en funktion med navnet test (), der optager adresserne på variablen a og b som parametre.
  8. Udskriv tekst på konsollen. \ N opretter en ny tom linje, før teksten udskrives. Endl (slutlinje) flytter markøren for at begynde udskrivning i den næste linje, efter at teksten er udskrevet.
  9. Udskriv værdien af ​​variabel a på konsollen sammen med anden tekst. Endl (slutlinie) flytter markøren for at begynde at udskrive i den næste linje.
  10. Udskriv værdien af ​​variabel b på konsollen sammen med anden tekst. Endl (slutlinie) flytter markøren for at begynde at udskrive i den næste linje.
  11. Programmet skal returnere værdi efter vellykket afslutning.
  12. Slutningen af ​​hovedfunktionens () krop.
  13. Definition af funktionstest (). Funktionen skal tage to heltalsmarkørvariabler * n1 og * n2.
  14. Tildeling af markørvariablen * n1 en værdi på 10.
  15. Tildeling af markørvariablen * n2 en værdi på 11.
  16. Slutningen af ​​funktionstestens krop ().

Selvom nye værdier tildeles variablen a og b inde i funktionstesten, når funktionsopkaldet er afsluttet, afspejles det ikke den ydre funktions hoved.

Brug af markører som funktionsargumenter hjælper med at overføre variabelens faktiske adresse i funktionen, og alle ændringer, der udføres på variablen, reflekteres i den ydre funktion.

I ovenstående tilfælde har funktionen 'test' adressen på variablerne 'a' og 'b.' Disse to variabler er direkte tilgængelige fra funktionen 'test', og derfor ændres enhver ændring, der foretages i disse variabler, i opkaldsfunktionen 'hoved'.

Fordele ved at bruge markører

Her er fordele / fordele ved at bruge pointers

  • Markører er variabler, der gemmer adressen på andre variabler i C ++.
  • Mere end én variabel kan ændres og returneres ved hjælp af markører.
  • Hukommelse kan tildeles og de-allokeres dynamisk ved hjælp af pegepinde.
  • Markører hjælper med at forenkle programmets kompleksitet.
  • Køringshastigheden for et program forbedres ved hjælp af markører.

Resumé:

  • En markør henviser til en variabel holdeadresse for en anden variabel.
  • Hver markør har en gyldig datatype.
  • En markør er en symbolsk repræsentation af en hukommelsesadresse.
  • Markører tillader programmer at simulere kald-for-reference og oprette og manipulere dynamiske datastrukturer.
  • Arrays og pekere bruger et relateret koncept.
  • Arraynavnet angiver arrayets base.
  • Hvis du vil tildele en matrixs adresse til en markør, skal du ikke bruge et ampersand (&).
  • Hvis der ikke er nogen specifik adresse til at tildele en markørvariabel, skal du tildele den en NULL.