Hvad er pointerne i C ++?

Peger på det mest kraftfulde værktøj i c ++, det hjælper programmereren med at få adgang til og manipulere hukommelsen direkte. Når der for eksempel oprettes en variabel, er kompilatorens opgave at foretage hukommelsesallokering for at gemme variablen. Og denne værdi hentes ved hjælp af det variabelnavn, der er tildelt dataene. C ++ har kompatibilitet til at gemme og hente dataene fra hukommelsen under henvisning til adressen på den hukommelsesplacering, hvor dataene er gemt. C ++ udfører endda pointer på en markør.

Syntaks

Det generelle format for markørdeklarationen er:

Data_type * pointer -variable-name

Bemærk, at markørvariablen skal foregå med en stjerne (*)

Eksempel: int * xptr;

Variablen xptr er en markør til et heltal. Generelt kan pointervariabler pege på heltalvariabler, tegnvariabler, arrays, filer, funktioner.

Hvorfor har vi brug for Pointers i C ++?

Dynamisk allokering af hukommelse gøres enkel i C ++ ved hjælp af pointers, den mest fremtrædende betydning af pointer er, at de er meget effektive til håndtering af de forskellige datatyper. De øger eksekveringshastigheden, når funktionen returnerer en værdi og giver også hånd i adgang til en variabel, der er defineret uden for funktionen. Den mest almindelige anvendelse inkluderer datastyring og adgang til klassemedlemfunktioner.

Sådan oprettes pointers i C ++?

Her er følgende trin for at oprette pointers i C ++

Trin # 1 - Initialisering af pointers

Det tilrådes at initialisere pointervariabler, så snart de er erklæret. Da markørvariabler gemmer adresser, kan de adressere enhver del af hukommelsen.

int *a; // pointer to an integer
double *da; // pointer to a double
float *fa; // pointer to afloat
char *ch // character pointer

Overvej følgende eksempel:

int p, * pi; // Denne erklæring instruerer kompilatoren til at reservere et mellemrum til variablen p i hukommelsen til at indeholde en heltalværdi.

pi = & a; // Tildeler adressen på heltalvariablen p til markørvariablen. For eksempel, hvis adressen på p er 4581, vil værdien i * pi være lig med 4581.

Trin 2 - Pointer er annulleret

Her får markørvariablen lov til at pege enhver datatype, og denne type bruges til at videregive pegere til at fungere, der fungerer uafhængigt af den datatype, der peges på.

Syntaks: void * pointer variabel;

Eksempel:

#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )

Produktion:

$ g ++ - for hoved * .cpp
$ vigtigste
værdien peget på iv er 3
Adressen til x er 0x7ffefbbee6d4
værdien peget på fv er 45, 2
Adressen til f er 0x7ffefbbee6d0
Adressen til x er 0x7ffefbbee6d4

adressen til f er 0x7ffefbbee6d0

Trin # 3 - Pegede aritmetiske operationer i C ++

Pointer aritmetik udføres med arrays. Følgende operationer kan udføres på pointers. De er:

  • Forøgelse (++)
  • Dekrement (-)
  • Markør tilføjelse
  • Pointer subtraktion

Når vi tilføjer 1 til markøren, specificeres det at tilføje størrelsen på markøren, der peger på.

Nedenstående program specificerer pointer aritmetik, det fungerer, indtil det kommer i slutningen af ​​arrayet.

#include
#include
using namespace std;
void pointerarithmetic(int a(), int size)
(
int *e, *t; //Declaring two int pointers variables
e = a; //assigning e to point the arrays initial element a(0) t = a + size; // assigning variable t to the array last element
while(e != t)
(
cout << *e << endl; //displays the e
e++; // incrementing ( next element)
)
)
int main()
(
int a() = (2, 4, 6, 8, 10, 12, 14, 16, 18, 20);
pointerarithmetic (a, 20);
return 0;
)

Produktion:

$ g ++ - for hoved * .cpp
$ vigtigste
2

4

6

8

10

12

14

16

18

20

0

0

4196480

0

-1743362854

32.686

1

0

153860328

32.766

Trin 4 - Markør til markør

float ** fpp;

Det angiver to niveauer af pegepunkter ( Flere indirekte ). Det er en variabel, der peger på en anden markør, der yderligere peger på et objekt, der er specificeret i et hukommelsessted. F.eks. Kan fpp være en float-pointer, der pt peger på hukommelsesadressen 2001, størrelsen på float er 8 bytes, derefter ved

FPP ++;

angiver fpp, der peger på adresse 2009. På samme måde, når variablen er dekrementeret med 1, vil den pege på den forrige placering af sin basetype på adresse 1993.

Trin # 5 - Markør til funktioner

Når pegere sendes til en funktion som argumenter, ændres dataelementerne, der er knyttet til disse pointeres variabel, inden for funktionen og derefter returneres til det opkaldende program, bevares ændringerne i det kaldende program. Når en markør sendes som en parameter, ændres de respektive dataelementer globalt fra den kaldte funktion. Markøren sendes som reference. Funktioner kan udføres i pegepunkter på forskellige måder:

  1. funktionen påberåbes ved at videregive referencen
  2. Funktionen påberåbes ved at sende en markør

Funktionen påberåbes ved at videregive referencen

I dette sendes adressen som et argument i stedet for værdier.

Eksempel:

#include
using namespace std;
void changefn(int*, int*);
int main()
(
int n = 5, m = 6;
cout << "Before change" << endl;
cout << "n = " << n << endl;
cout << "m = " << m << endl;
changefn(&n, &m);
cout << "\nAfter change" << endl;
cout << "n = " << n << endl;
cout << "m = " << m << endl;
return 0;
)
void changefn(int* x1, int* x2) (
int s1;
s1 = *x1;
*x1 = *x2;
*x2 = s1;
)

Produktion:

$ g ++ - for hoved * .cpp
$ vigtigste
Før ændring

n = 5

m = 6

Efter ændring

n = 6

m = 5

Konklusion

Denne artikel havde til formål at opdatere viden om, hvordan man bruger pointere i C ++ og deres grundlæggende emner på en enkel måde med et eksempel. Pointer er også kendt som locator reducerer kodeangivelsen for højere ydelse. Henvisninger spiller en vigtig rolle i implementeringen af ​​datastrukturer som linket liste og programmering på systemniveau. De er det mest foretrukne sprog i indlejrede systemer, da de er en god måde at få adgang til hukommelse direkte ved hjælp af pegere på.

Anbefalede artikler

Dette er en guide til Pointers i C ++. Her diskuterer vi, hvordan man opretter pointers i C ++ med de givne eksempler og output, og hvorfor har vi brug for det. Du kan også se på følgende dataanalysekursus for at lære mere

  1. Pegere i Python
  2. Datatyper i C
  3. Arrays i C ++
  4. Stjernemønstre i c ++
  5. Hvordan fungerer pointers i C #?

Kategori: