C ++ pekere med eksempler

Innholdsfortegnelse:

Anonim

Hva er pekere?

I C ++ refererer en peker til en variabel som inneholder adressen til en annen variabel. Som vanlige variabler har pekere en datatype. For eksempel kan en peker av typen heltall inneholde adressen til en variabel av typen heltall. En peker med tegntype kan inneholde adressen til en variabel av karaktertypen.

Du bør se en peker som en symbolsk fremstilling av en minneadresse. Med pekere kan programmer simulere referanse. De kan også opprette og manipulere dynamiske datastrukturer. I C ++ refererer en pekervariabel til en variabel som peker til en bestemt adresse i et minne som er pekt av en annen variabel.

I denne C ++ opplæringen vil du lære:

  • Hva er pekere?
  • Adresser i C ++
  • Pointer Declaration Syntax
  • Referanseoperatør (&) og referanseoperatør (*)
  • Pekere og matriser
  • NULL-pekeren
  • Pekere med variabler
  • Påføring av pekere
  • Fordeler med å bruke pekere

Adresser i C ++

For å forstå C ++ pekere, må du forstå hvordan datamaskiner lagrer data.

Når du oppretter en variabel i C ++ -programmet, tildeles den litt plass til dataminnet. Verdien til denne variabelen er lagret på den tildelte plasseringen.

For å vite plasseringen i dataminnet der dataene er lagret, gir C ++ & (referanse) operatøren. Operatøren returnerer adressen som en variabel opptar.

For eksempel, hvis x er en variabel, returnerer & x adressen til variabelen.

Pointer Declaration Syntax

Erklæringen om C ++ tar følgende syntaks:

datatype *variable_name;
  • Datatypen er basistypen til pekeren som må være en gyldig C ++ datatype.
  • Variabelnavnet skal være navnet på pekervariabelen.
  • Asterisk brukt ovenfor for pekerdeklarasjon ligner på en stjerne som brukes til å utføre multiplikasjonsoperasjon. Det er stjernen som markerer variabelen som en peker.

Her er et eksempel på gyldige pekererklæ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

Referanseoperatør (&) og referanseoperatør (*)

Referanseoperatøren (&) returnerer variabelens adresse.

Dereferensoperatøren (*) hjelper oss med å få verdien som er lagret i en minneadresse.

For eksempel:

Hvis vi har en variabel gitt navnet num, lagres i adressen 0x234 og lagrer verdien 28.

Referanseoperatøren (&) vil returnere 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;}

Produksjon:

Slik fungerer dette:

Her er et skjermbilde av koden:

Kode Forklaring:

  1. Importer iostream header-fil. Dette vil tillate oss å bruke funksjonene som er definert i toppfilen uten å få feil.
  2. Inkluder std navneområdet for å bruke klassene sine uten å kalle det.
  3. Ring til hovedfunksjonen (). Programlogikken skal legges til i kroppen til denne funksjonen. {Markerer begynnelsen på funksjonens kropp.
  4. Erklær en heltalsvariabel x og tildel den til verdien 27.
  5. Erklære en pekervariabel * ip.
  6. Lagre adressen til variabel x i pekervariabelen.
  7. Skriv ut litt tekst på konsollen.
  8. Skriv ut verdien av variabelen x på skjermen.
  9. Skriv ut litt tekst på konsollen.
  10. Skriv ut adressen til variabelen x. Adressens verdi ble lagret i variabelen ip.
  11. Skriv ut litt tekst på konsollen.
  12. Utskriftsverdien som er lagret på adressen til pekeren.
  13. Programmet skal returnere verdi etter vellykket gjennomføring.
  14. Slutten av kroppen til hovedfunksjonen ().

Pekere og matriser

Arrays og pekere fungerer basert på et relatert konsept. Det er forskjellige ting å merke seg når du arbeider med matriser som har pekere. Selve matrisen betegner matrisens baseadresse. Dette betyr at for å tilordne adressen til en matrise til en peker, bør du ikke bruke ampersand (&).

For eksempel:

p = arr;

Ovennevnte er riktig siden arr representerer matrisenes adresse. Her er et annet eksempel:

p = &arr;

Ovennevnte er feil.

Vi kan implisitt konvertere en matrise til en peker. For eksempel:

int arr [20];int * ip;

Nedenfor er en gyldig operasjon:

ip = arr;

Etter erklæringen ovenfor vil ip og arr være ekvivalente, og de vil dele eiendommer. Imidlertid kan en annen adresse tilordnes ip, men vi kan ikke tildele noe til arr.

Eksempel 2:

Dette eksemplet viser hvordan du kan krysse en matrise ved hjelp av pekere:

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

Produksjon:

Her er et skjermbilde av koden:

Kode Forklaring:

  1. Erklære en helpekervariabel ip.
  2. Erklær en matrise med navnet arr og lagre 6 heltall i den.
  3. Tilordne arr til ip. IP og arr blir ekvivalente.
  4. Lag en for en løkke. Sløyfevariabelen x ble opprettet for å iterere over matriseelementene fra indeks 0 til 5.
  5. Skriv ut verdiene som er lagret på adressen til pekerens IP. En verdi vil bli returnert per iterasjon, og totalt 6 repetisjoner vil bli gjort. Endl er et C ++ nøkkelord som betyr sluttlinjen. Denne handlingen lar deg flytte markøren til neste linje etter at hver verdi er skrevet ut. Hver verdi blir skrevet ut på en enkelt linje.
  6. Å flytte pekeren til neste int-posisjon etter hver iterasjon.
  7. Slutten av for en løkke.
  8. Programmet må returnere noe etter vellykket gjennomføring.
  9. Slutten av hovedfunksjonen ().

NULL-pekeren

Hvis det ikke er noen nøyaktig adresse som skal tildeles, kan pekervariabelen tildeles en NULL. Det bør gjøres under erklæringen. En slik peker er kjent som en nullpeker. Verdien er null og er definert i mange standardbiblioteker som iostream.

Eksempel 3:

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

Produksjon:

Her er et skjermbilde av koden:

Kode Forklaring:

  1. Erklær en pekervariabel ip og tildel den til verdien NULL.
  2. Utskriftsverdi av pekervariabel ip sammen med litt tekst på konsollen.
  3. Programmet må returnere verdi etter vellykket gjennomføring.
  4. Slutten av kroppen til hovedfunksjonen ().

Pekere med variabler

Med C ++ kan du manipulere data direkte fra datamaskinens minne.

Minneplassen kan tilordnes eller tildeles på nytt som man ønsker. Dette er mulig med Pointer-variabler.

Pekervariabler peker på en bestemt adresse i datamaskinens minne som en annen variabel peker på.

Det kan erklæres som følger:

int *p;

Eller,

int* p;

I du-eksemplet har vi deklarert pekervariabelen p.

Den vil inneholde en minneadresse.

Stjernen er den referanseoperatøren som betyr en peker til.

Pekeren p peker på et heltall i minneadressen.

Eksempel 4:

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

Produksjon:

Her er et skjermbilde av koden:

Kode Forklaring:

  1. Erklær en pekervariabel p og en variabel x med verdien 30.
  2. Tilordne adressen til variabelen x til p.
  3. Skriv ut verdien på pekervariabelen p sammen med litt tekst på konsollen.
  4. Programmet må returnere verdi etter vellykket gjennomføring.
  5. Slutten av kroppen til hovedfunksjonen ().

Påføring av pekere

Funksjoner i C ++ kan bare returnere en verdi. Videre tildeles alle variablene som er deklarert i en funksjon på funksjonssamtalen. Så snart funksjonen kommer tilbake, blir alle stackvariablene ødelagt.

Argumenter for å fungere sendes etter verdi, og endringer som gjøres på variablene endrer ikke verdien på de faktiske variablene som sendes. Følgende eksempel hjelper til med å illustrere dette konseptet: -

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;}

Produksjon:

Her er et skjermbilde av koden:

Kode Forklaring:

  1. Lag en prototype av en funksjon som heter test som tar to heltallsparametere.
  2. Ring til hovedfunksjonen (). Vi vil legge til programlogikken i kroppen.
  3. Erklær to heltallvariabler a og b, hver med en verdi på 5.
  4. Skriv ut litt tekst på konsollen. Endl (sluttlinje) flytter markøren for å begynne å skrive ut i neste linje.
  5. Skriv ut verdien av variabel a på konsollen sammen med annen tekst. Endl (sluttlinje) flytter markøren for å begynne å skrive ut i neste linje.
  6. Skriv ut verdien av variabel b på konsollen sammen med annen tekst. Endl (sluttlinje) flytter markøren for å begynne å skrive ut i neste linje.
  7. Opprett en funksjon med navnet test () som tar inn adressene til variabelen a og b som parametere.
  8. Skriv ut litt tekst på konsollen. \ N vil opprette en ny tom linje før teksten skrives ut. Endl (sluttlinje) flytter markøren for å begynne å skrive ut i neste linje etter at teksten er skrevet ut.
  9. Skriv ut verdien av variabel a på konsollen sammen med annen tekst. Endl (sluttlinje) flytter markøren for å begynne å skrive ut i neste linje.
  10. Skriv ut verdien av variabel b på konsollen sammen med annen tekst. Endl (sluttlinje) flytter markøren for å begynne å skrive ut i neste linje.
  11. Programmet må returnere verdi etter vellykket gjennomføring.
  12. Slutten av kroppen til hovedfunksjonen ().
  13. Definere funksjonstesten (). Funksjonen skal ta to helpekervariabler * n1 og * n2.
  14. Tilordne pekervariabelen * n1 en verdi på 10.
  15. Tilordne pekervariabelen * n2 en verdi på 11.
  16. Slutten av kroppen til funksjonstesten ().

Selv om nye verdier er tilordnet variabelen a og b inne i funksjonstesten, blir funksjonen ikke fullført, men den samme reflekteres ikke den ytre funksjonens hoved.

Bruk av pekere som funksjonsargumenter hjelper til med å overføre variabelens faktiske adresse i funksjonen, og alle endringene som utføres på variabelen vil gjenspeiles i den ytre funksjonen.

I ovennevnte tilfelle har funksjonen 'test' adressen til variablene 'a' og 'b.' Disse to variablene er direkte tilgjengelige fra funksjonen 'test', og derfor blir enhver endring gjort til disse variablene reflektert i innringerfunksjonen 'hoved'.

Fordeler med å bruke pekere

Her er fordeler / fordeler med å bruke Pointers

  • Pekere er variabler som lagrer adressen til andre variabler i C ++.
  • Mer enn en variabel kan endres og returneres ved hjelp av pekere.
  • Minne kan tildeles og avdeles dynamisk ved hjelp av pekere.
  • Pekere hjelper til med å forenkle kompleksiteten i programmet.
  • Kjøringshastigheten til et program forbedres ved å bruke pekere.

Sammendrag:

  • En peker refererer til en variabel adresse for en annen variabel.
  • Hver peker har en gyldig datatype.
  • En peker er en symbolsk fremstilling av en minneadresse.
  • Pekere tillater programmer å simulere referanse og opprette og manipulere dynamiske datastrukturer.
  • Arrays og pekere bruker et relatert konsept.
  • Matrisenavnet angir matrisenes base.
  • Hvis du vil tilordne adressen til en matrise til en peker, ikke bruk et ampersand (&).
  • Hvis det ikke er noen spesifikk adresse for å tildele en pekervariabel, tilordner den en NULL.