C++ Pekere med eksempler

Hva er Pointers?

In C++, refererer en peker til en variabel som har 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 av tegntype kan inneholde adressen til en variabel av tegntype.

Du bør se en peker som en symbolsk representasjon av en minneadresse. Med pekere kan programmer simulere call-by-referanse. De kan også lage og manipulere dynamiske datastrukturer. I C++, refererer en pekervariabel til en variabel som peker til en spesifikk adresse i et minne pekt av en annen variabel.

Adresser i C++

Å forstå C++ tips, må du forstå hvordan datamaskiner lagrer data.

Når du oppretter en variabel i din C++ programmet, er det tildelt litt plass i datamaskinens minne. Verdien til denne variabelen lagres på den tildelte plasseringen.

For å vite hvor dataene er lagret i datamaskinens minne, C++ gir & (referanse) operatør. Operatøren returnerer adressen som en variabel opptar.

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

Pekererklæringssyntaks

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

datatype *variable_name; 
  • Datatypen er basistypen til pekeren som må være gyldig C++ data-type.
  • Variabelnavnet er skal være navnet på pekervariabelen.
  • Asterisk brukt ovenfor for pekererklæring ligner på 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 integer
double *x;    // a pointer to double
float  *x;    // a pointer to float
char   *ch     // a pointer to a character

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

Referanseoperatoren (&) returnerer variabelens adresse.

Dereference-operatoren (*) hjelper oss å finne verdien som er lagret i en minneadresse.

For eksempel:

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

Referanseoperatoren (&) vil returnere 0x234.

Dereferenceoperatøren (*) vil returnere 5.

Eksempel 1:

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

Utgang:

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

Slik fungerer dette:

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

Her er et skjermbilde av koden:

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

Kodeforklaring:

  1. Importer iostream-headerfilen. Dette vil tillate oss å bruke funksjonene som er definert i overskriftsfilen uten å få feil.
  2. Inkluder std-navneområdet for å bruke klassene uten å kalle det.
  3. Kalle hoved()-funksjonen. Programlogikken skal legges til i hoveddelen av denne funksjonen. { markerer begynnelsen av funksjonens hoveddel.
  4. Deklarer en heltallsvariabel x og tilordne den en verdi på 27.
  5. Deklarer en pekervariabel *ip.
  6. Lagre adressen til variabel x i pekervariabelen.
  7. Skriv ut litt tekst på konsollen.
  8. Skriv ut verdien av variabel x på skjermen.
  9. Skriv ut litt tekst på konsollen.
  10. Skriv ut adressen til variabel x. Verdien av adressen ble lagret i variabelen ip.
  11. Skriv ut litt tekst på konsollen.
  12. Utskriftsverdi av lagret på adressen til pekeren.
  13. Programmet skal returnere verdi ved vellykket utførelse.
  14. Slutten av hoveddelen av hoved()-funksjonen.

Pekere og matriser

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

For eksempel:

p = arr;

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

p = &arr;

Ovenstående 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 likeverdige, og de vil dele eiendommer. En annen adresse kan imidlertid tilordnes ip, men vi kan ikke tilordne noe til arr.

Eksempel 2:

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

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

Utgang:

Pekere og matriser

Her er et skjermbilde av koden:

Pekere og matriser

Kodeforklaring:

  1. Deklarer en heltallspekervariabel ip.
  2. Erklær en matrise kalt arr og lagre 6 heltall i den.
  3. Tilordne arr til ip. IP og arr blir likeverdige.
  4. Lag en for en loop. Løkkevariabelen x ble opprettet for å iterere over array-elementene fra indeks 0 til 5.
  5. Skriv ut verdiene som er lagret på adressen til pekerens IP. Én verdi vil bli returnert per iterasjon, og totalt 6 repetisjoner vil bli utført. Endl er en 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 vil bli skrevet ut på en individuell linje.
  6. For å flytte pekeren til neste int-posisjon etter hver iterasjon.
  7. Slutten av for en løkke.
  8. Programmet må returnere noe ved vellykket gjennomføring.
  9. Slutten av hoved()-funksjonens hoveddel.

NULL-peker

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

Eksempel 3:

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

Utgang:

NULL-peker

Her er et skjermbilde av koden:

NULL-peker

Kodeforklaring:

  1. Deklarer en pekervariabel ip og tilordne den verdien NULL.
  2. Skriv ut verdien av pekervariabel ip sammen med litt tekst på konsollen.
  3. Programmet må returnere verdi ved vellykket gjennomføring.
  4. Slutten av hoveddelen av hoved()-funksjonen.

Pekere for variabler

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

Minneplassen kan tildeles eller omtilordnes etter eget ønske. Dette er muliggjort av Pointer-variabler.

Pekervariabler peker til en spesifikk adresse i datamaskinens minne pekt på av en annen variabel.

Det kan deklareres som følger:

int *p;

Eller,

int* p;

I ditt eksempel har vi erklært pekervariabelen p.

Den vil inneholde en minneadresse.

Stjernen er dereference-operatoren som betyr en peker til.

Pekeren p peker på en heltallsverdi i minneadressen.

Eksempel 4:

#include <iostream>

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

Utgang:

Pekere for variabler

Her er et skjermbilde av koden:

Pekere for variabler

Kodeforklaring:

  1. Deklarer en pekervariabel p og en variabel x med en verdi på 30.
  2. Tilordne adressen til variabel x til p.
  3. Skriv ut verdien av pekervariabel p ved siden av litt tekst på konsollen.
  4. Programmet må returnere verdi ved vellykket gjennomføring.
  5. Slutten av hoveddelen av hoved()-funksjonen.

Bruk av pekere

Funksjoner i C++ kan bare returnere én verdi. Videre allokeres alle variablene som er deklarert i en funksjon på funksjonskallstakken. Så snart funksjonen kommer tilbake, blir alle stabelvariablene ødelagt.

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

Eksempel 5:

#include <iostream>

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

Utgang:

Bruk av pekere

Her er et skjermbilde av koden:

Bruk av pekere

Kodeforklaring:

  1. Lag en prototype av en funksjon kalt test som tar to heltallsparametere.
  2. Kalle hoved()-funksjonen. Vi vil legge til programlogikken inne i kroppen.
  3. Deklarer to heltallsvariabler a og b, hver med en verdi på 5.
  4. Skriv ut litt tekst på konsollen. Endl (sluttlinje) vil flytte markøren for å begynne å skrive ut på neste linje.
  5. Skriv ut verdien av variabel a på konsollen sammen med annen tekst. Endl (sluttlinje) vil flytte markøren for å begynne å skrive ut på neste linje.
  6. Skriv ut verdien av variabel b på konsollen sammen med annen tekst. Endl (sluttlinje) vil flytte markøren for å begynne å skrive ut på neste linje.
  7. Lag en funksjon kalt test() som tar inn adressene til variabel 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) vil flytte 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) vil flytte markøren for å begynne å skrive ut på neste linje.
  10. Skriv ut verdien av variabel b på konsollen sammen med annen tekst. Endl (sluttlinje) vil flytte markøren for å begynne å skrive ut på neste linje.
  11. Programmet må returnere verdi ved vellykket gjennomføring.
  12. Slutten av hoveddelen av hoved()-funksjonen.
  13. Definere funksjonen test(). Funksjonen skal ta to heltallspekervariabler *n1 og *n2.
  14. Tilordne pekervariabelen *n1 en verdi på 10.
  15. Tilordne pekervariabelen *n2 en verdi på 11.
  16. Slutten av brødteksten til funksjonstesten().

Selv om nye verdier tilordnes variabel a og b inne i funksjonstesten, reflekteres ikke det samme den ytre hovedfunksjonen når funksjonskallet er fullført.

Å bruke pekere som funksjonsargumenter hjelper til med å sende variabelens faktiske adresse i funksjonen, og alle endringene som utføres på variabelen vil reflekteres i den ytre funksjonen.

I tilfellet ovenfor har funksjonen 'test' adressen til variablene 'a' og 'b.' Disse to variablene er direkte tilgjengelige fra funksjonen 'test', og derfor reflekteres enhver endring som gjøres i disse variablene i anropsfunksjonen 'main'.

Fordeler med å bruke Pointers

Her er fordeler/fordeler med å bruke Pointers

  • Pekere er variabler som lagrer adressen til andre variabler i C++.
  • Mer enn én variabel kan endres og returneres av funksjon ved hjelp av pekere.
  • Minne kan tildeles dynamisk og deallokeres ved hjelp av pekere.
  • Pekere hjelper til med å forenkle kompleksiteten til programmet.
  • Utførelseshastigheten til et program forbedres ved å bruke pekere.

Sammendrag

  • En peker refererer til en variabelholdeadresse til en annen variabel.
  • Hver peker har en gyldig datatype.
  • En peker er en symbolsk representasjon av en minneadresse.
  • Pekere lar programmer simulere call-by-referanse og lage og manipulere dynamiske datastrukturer.
  • arrays og pekere bruker et relatert konsept.
  • Matrisenavnet angir matrisens base.
  • Hvis du vil tilordne adressen til en matrise til en peker, ikke bruk et og-tegn (&).
  • Hvis det ikke er noen spesifikk adresse for å tilordne en pekervariabel, tilordne den en NULL.

Oppsummer dette innlegget med: