C ++ pekare med exempel

Innehållsförteckning:

Anonim

Vad är pekare?

I C ++ hänvisar en pekare till en variabel som innehåller adressen till en annan variabel. Liksom vanliga variabler har pekare en datatyp. Till exempel kan en pekare av typen heltal innehålla adressen till en variabel av typen heltal. En pekare av teckentyp kan innehålla adressen till en variabel av teckentyp.

Du bör se en pekare som en symbolisk representation av en minnesadress. Med pekare kan program simulera samtal för referens. De kan också skapa och manipulera dynamiska datastrukturer. I C ++ hänvisar en pekervariabel till en variabel som pekar på en specifik adress i ett minne som pekas av en annan variabel.

I denna C ++ -handledning lär du dig:

  • Vad är pekare?
  • Adresser i C ++
  • Pointer Declaration Syntax
  • Referensoperatör (&) och referensoperatör (*)
  • Pekare och matriser
  • NULL-pekare
  • Pekare med variabler
  • Tillämpning av pekare
  • Fördelar med att använda pekare

Adresser i C ++

För att förstå C ++ - pekare måste du förstå hur datorer lagrar data.

När du skapar en variabel i ditt C ++ - program tilldelas den något utrymme i datorns minne. Värdet på denna variabel lagras på den tilldelade platsen.

För att känna till platsen i datorminnet där data lagras, tillhandahåller C ++ & (referens) operatören. Operatören returnerar adressen som en variabel upptar.

Om x till exempel är en variabel returnerar & x variabelns adress.

Pointer Declaration Syntax

Deklarationen av C ++ tar följande syntax:

datatype *variable_name;
  • Datatypen är pekarens bastyp som måste vara en giltig C ++ datatyp.
  • Variabelnamnet är bör vara namnet på pekervariabeln.
  • Asterisk som används ovan för pekardeklaration liknar den asterisk som används för att utföra multiplikationsåtgärder. Det är asterisken som markerar variabeln som en pekare.

Här är ett exempel på giltiga pekardeklarationer i C ++:

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

Referensoperatör (&) och referensoperatör (*)

Referensoperatören (&) returnerar variabelns adress.

Dereferensoperatören (*) hjälper oss att få det värde som har lagrats i en minnesadress.

Till exempel:

Om vi ​​har en variabel med namnet num, lagras i adressen 0x234 och lagrar värdet 28.

Referensoperatören (&) returnerar 0x234.

Dereferensoperatören (*) returnerar 5.

Exempel 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å här fungerar:

Här är en skärmdump av koden:

Kodförklaring:

  1. Importera iostream-rubrikfilen. Detta gör att vi kan använda de funktioner som definierats i rubrikfilen utan att få fel.
  2. Inkludera std-namnområdet för att använda sina klasser utan att kalla det.
  3. Ring huvudfunktionen (). Programlogiken bör läggas till i denna funktion. {Markerar början på funktionens kropp.
  4. Förklara en heltalsvariabel x och tilldela den ett värde på 27.
  5. Förklara en pekervariabel * ip.
  6. Lagra adressen till variabel x i pekervariabeln.
  7. Skriv ut lite text på konsolen.
  8. Skriv ut värdet på variabeln x på skärmen.
  9. Skriv ut lite text på konsolen.
  10. Skriv ut adressen till variabeln x. Adressens värde lagrades i variabeln ip.
  11. Skriv ut lite text på konsolen.
  12. Utskriftsvärde för lagrat på pekarens adress.
  13. Programmet ska returnera värde efter genomförd framgång.
  14. Slutet på huvudfunktionens () kropp.

Pekare och matriser

Arrays och pekare fungerar utifrån ett relaterat koncept. Det finns olika saker att notera när man arbetar med matriser som har pekare. Matrisnamnet i sig anger matrisens basadress. Detta innebär att du inte bör använda ett ampersand (&) för att tilldela en matris adress till en pekare.

Till exempel:

p = arr;

Ovanstående är korrekt eftersom arr representerar arrays adress. Här är ett annat exempel:

p = &arr;

Ovanstående är felaktig.

Vi kan implicit konvertera en matris till en pekare. Till exempel:

int arr [20];int * ip;

Nedan följer en giltig åtgärd:

ip = arr;

Efter ovanstående deklaration kommer ip och arr att vara ekvivalenta och de delar egenskaper. En annan adress kan dock tilldelas ip, men vi kan inte tilldela något till arr.

Exempel 2:

Det här exemplet visar hur man passerar en matris med hjälp av pekare:

#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:

Här är en skärmdump av koden:

Kodförklaring:

  1. Förklara en helpekarsvariabel ip.
  2. Förklara en matris med namnet arr och lagra 6 heltal i den.
  3. Tilldela arr till ip. IP och arr blir likvärdiga.
  4. Skapa en för en slinga. Slingvariabeln x skapades för att iterera över arrayelementen från index 0 till 5.
  5. Skriv ut värdena som lagras på pekarens IP-adress. Ett värde returneras per iteration och totalt 6 repetitioner kommer att göras. Endl är ett C ++ nyckelord som betyder slutraden. Denna åtgärd låter dig flytta markören till nästa rad efter att varje värde har skrivits ut. Varje värde skrivs ut på en enskild rad.
  6. Att flytta pekaren till nästa int-position efter varje iteration.
  7. Slutet av för en slinga.
  8. Programmet måste returnera något efter framgångsrikt genomförande.
  9. Slutet på huvudfunktionen ().

NULL-pekare

Om det inte finns någon exakt adress som ska tilldelas kan pekvariabeln tilldelas en NULL. Det bör göras under deklarationen. En sådan pekare är känd som en nollpekare. Dess värde är noll och definieras i många standardbibliotek som iostream.

Exempel 3:

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

Produktion:

Här är en skärmdump av koden:

Kodförklaring:

  1. Förklara en pekervariabel ip och tilldela den värdet NULL.
  2. Utskriftsvärde för pekervariabel ip tillsammans med lite text på konsolen.
  3. Programmet måste returnera värde när det är klart.
  4. Slutet på huvudfunktionens () kropp.

Pekare med variabler

Med C ++ kan du manipulera data direkt från datorns minne.

Minnesutrymmet kan tilldelas eller omfördelas som man vill. Detta möjliggörs genom pekervariabler.

Pekervariabler pekar på en specifik adress i datorns minne som en annan variabel pekar på.

Det kan förklaras enligt följande:

int *p;

Eller,

int* p;

I du-exemplet har vi deklarerat pekervariabeln p.

Den kommer att innehålla en minnesadress.

Asterisken är den referensoperatör som betyder en pekare till.

Pekaren p pekar på ett heltal i minnesadressen.

Exempel 4:

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

Produktion:

Här är en skärmdump av koden:

Kodförklaring:

  1. Förklara en pekervariabel p och en variabel x med värdet 30.
  2. Tilldela adressen till variabeln x till p.
  3. Skriv ut värdet på pekervariabeln p tillsammans med lite text på konsolen.
  4. Programmet måste returnera värde när det är klart.
  5. Slutet på huvudfunktionens () kropp.

Tillämpning av pekare

Funktioner i C ++ kan bara returnera ett värde. Vidare tilldelas alla variabler som deklarerats i en funktion på funktionssamtalstacken. Så snart funktionen återvänder förstörs alla stackvariabler.

Argument för att fungera skickas efter värde och ändringar som görs på variablerna ändrar inte värdet på de faktiska variablerna som skickas. Följande exempel hjälper till att illustrera detta koncept: -

Exempel 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:

Här är en skärmdump av koden:

Kodförklaring:

  1. Skapa en prototyp av en funktion med namnet test som tar två heltalsparametrar.
  2. Ring huvudfunktionen (). Vi lägger till programlogiken inuti dess kropp.
  3. Förklara två heltalsvariabler a och b, var och en med värdet 5.
  4. Skriv ut lite text på konsolen. Endl (slutrad) flyttar markören för att börja skriva ut i nästa rad.
  5. Skriv ut värdet på variabel a på konsolen tillsammans med annan text. Endl (slutrad) flyttar markören för att börja skriva ut i nästa rad.
  6. Skriv ut värdet på variabel b på konsolen tillsammans med annan text. Endl (slutrad) flyttar markören för att börja skriva ut i nästa rad.
  7. Skapa en funktion med namnet test () som tar in adresserna för variabel a och b som parametrar.
  8. Skriv ut lite text på konsolen. \ N skapar en ny tom rad innan texten skrivs ut. Endl (slutrad) flyttar markören för att börja skriva ut i nästa rad efter att texten har skrivits ut.
  9. Skriv ut värdet på variabel a på konsolen tillsammans med annan text. Endl (slutrad) flyttar markören för att börja skriva ut i nästa rad.
  10. Skriv ut värdet på variabel b på konsolen tillsammans med annan text. Endl (slutrad) flyttar markören för att börja skriva ut i nästa rad.
  11. Programmet måste returnera värde när det är klart.
  12. Slutet på huvudfunktionens () kropp.
  13. Definiera funktionstest (). Funktionen ska ta två helpunktsvariabler * n1 och * n2.
  14. Tilldela pekervariabeln * n1 ett värde på 10.
  15. Tilldela pekervariabeln * n2 ett värde på 11.
  16. Slutet på funktionstestets kropp ().

Trots att nya värden tilldelas variablerna a och b inuti funktionstestet, när funktionssamtalet slutförts, återspeglas detsamma inte den yttre funktionens huvud.

Att använda pekare som funktionsargument hjälper till att skicka variabelns faktiska adress i funktionen, och alla ändringar som utförs på variabeln kommer att återspeglas i den yttre funktionen.

I ovanstående fall har funktionen 'test' adressen till variablerna 'a' och 'b'. Dessa två variabler är direkt tillgängliga från funktionstestet, och all ändring av dessa variabler återspeglas därför i uppringningsfunktionen "huvud".

Fördelar med att använda pekare

Här är fördelar / fördelar med att använda pekare

  • Pekare är variabler som lagrar adressen till andra variabler i C ++.
  • Mer än en variabel kan ändras och returneras med hjälp av pekare.
  • Minne kan allokeras dynamiskt och avdelas med hjälp av pekare.
  • Pekare hjälper till att förenkla programmets komplexitet.
  • Körningshastigheten för ett program förbättras med hjälp av pekare.

Sammanfattning:

  • En pekare hänvisar till en variabelinnehållsadress för en annan variabel.
  • Varje pekare har en giltig datatyp.
  • En pekare är en symbolisk representation av en minnesadress.
  • Pekare tillåter program att simulera anropsreferens och skapa och manipulera dynamiska datastrukturer.
  • Arrays och pekare använder ett relaterat koncept.
  • Arraynamnet anger arrayens bas.
  • Om du vill tilldela en matris adress till en pekare, använd inte ett ampersand (&).
  • Om det inte finns någon specifik adress för att tilldela en pekervariabel, tilldela den en NULL.