Care sunt indicatorii din C ++?

Afișează cel mai puternic instrument din c ++, acesta ajută programatorul să acceseze și să manipuleze direct memoria. De exemplu, atunci când este creată o variabilă, sarcina compilatorului este să efectueze alocarea memoriei pentru a stoca valoarea variabilei. Și această valoare este preluată folosind numele variabilei alocate datelor. C ++ are compatibilitatea de a stoca și de a prelua datele din memorie referindu-se la adresa locației de memorie la care sunt stocate datele. C ++ chiar efectuează indicatoare pe un indicator.

Sintaxă

Formatul general al declarației pointer este:

Data_type * pointer -variable-name

Rețineți că variabila pointer trebuie să fie precedată de un asterisc (*)

Exemplu: int * xptr;

Variabila xptr este un pointer către un număr întreg. În general, variabilele pointer pot indica variabile întregi, variabile de caractere, tablouri, fișiere, funcții.

De ce avem nevoie de indicatori în C ++?

Alocarea dinamică a memoriei este simplă în C ++ folosind indicatoarele, cea mai importantă importanță a indicatoarelor este că sunt mult mai eficiente în gestionarea diferitelor tipuri de date. Acestea cresc viteza de execuție atunci când funcția returnează o valoare și, de asemenea, oferă acces la o variabilă definită în afara funcției. Cea mai comună utilizare include gestionarea datelor și accesarea funcțiilor membrilor clasei.

Cum se creează indicatoare în C ++?

Iată următorii pași pentru a crea indicatoare în C ++

Pasul 1 - Inițializarea indicatoarelor

Se recomandă inițializarea variabilelor pointer imediat ce sunt declarate. Întrucât variabilele pointer stocează adrese, ele pot adresa orice porțiune a memoriei.

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

Luați în considerare următorul exemplu:

int p, * pi; // Această instrucțiune recomandă compilatorului să rezerve un spațiu pentru variabila p în memorie pentru a păstra o valoare întreagă.

pi = & a; // Atribuie adresa variabilei întregi p la variabila pointer. De exemplu, dacă adresa lui p este 4581, atunci valoarea din * pi va fi egală cu 4581.

Pasul 2 - Pointer vid

Aici variabila pointer este permisă să indice orice tip de date și acest tip este utilizat pentru a trece indicatoarele pentru a funcționa independent de tipul de date indicat.

Sintaxa: void * variabilă pointer;

Exemplu:

#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 "< )

ieşire:

$ g ++ -o principal * .cpp
$ principală
valoarea indicată de iv este 3
Adresa lui x este 0x7ffefbbee6d4
valoarea indicată de fv este 45.2
Adresa lui f este 0x7ffefbbee6d0
Adresa lui x este 0x7ffefbbee6d4

adresa lui f este 0x7ffefbbee6d0

Pasul 3 - Pointere Operații aritmetice în C ++

Aritmetica pointer se realizează cu tablouri. Următoarele operații pot fi efectuate pe indicatoare. Sunt:

  • Creștere (++)
  • Diminuare (-)
  • Adăugare pointer
  • Scăderile pointer

Când adăugăm 1 la pointer specifică adăugarea dimensiunii indicatorului indicat la.

Programul de mai jos specifică aritmetica indicatoarelor funcționează până când ajunge la sfârșitul tabloului.

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

ieşire:

$ g ++ -o principal * .cpp
$ principală
2

4

6

8

10

12

14

16

18

20

0

0

4196480

0

-1743362854

32686

1

0

153860328

32766

Pasul 4 - Pointer to Pointer

float ** fpp;

Acesta indică două niveluri de indicatori ( Indirecții multiple ). Este o variabilă care indică un alt indicator indică în continuare un obiect specificat într-o locație de memorie. De exemplu, fpp să fie un indicator de tip float care indică în prezent adresa de memorie 2001, dimensiunea float-ului este de 8 octeți, apoi de

fpp ++;

indică fpp care indică adresa 2009. În mod similar, când variabila este decrementată cu 1, va indica locația anterioară a tipului său de bază la adresa 1993.

Pasul 5 - Pointer pentru funcții

Când indicatoarele sunt trecute la o funcție ca argumente, elementele de date asociate variabilei acestor indicatoare sunt modificate în cadrul funcției și apoi returnate la programul apelant, modificările vor fi păstrate în programul apelant. Când un pointer este trecut ca parametru, elementele de date respective sunt modificate la nivel global din funcția apelată. Indicatorul este trecut prin referință. Funcțiile pot fi efectuate cu ajutorul diferitelor moduri:

  1. funcția invocată prin trecerea referinței
  2. Funcția invocată prin trecerea unui indicator

Funcția invocată prin trecerea referinței

În acest sens, adresa este transmisă ca argument în loc de valori.

Exemplu:

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

ieşire:

$ g ++ -o principal * .cpp
$ principală
Înainte de schimbare

n = 5

m = 6

După schimbare

n = 6

m = 5

Concluzie

Acest articol intenționa să reîmprospăteze cunoștințele despre cum să folosești indicatoarele în C ++ și subiectele lor de bază într-un mod simplu cu un exemplu. Pointer este, de asemenea, cunoscut sub numele de locator reduce instrucțiunea de cod pentru performanțe mai mari. Pointerii joacă un rol esențial în implementarea structurilor de date, cum ar fi lista conectată și programarea la nivel de sistem. Acestea sunt cele mai preferate limbaje în sistemele încorporate, deoarece sunt o modalitate bună de a accesa memoria direct folosind indicatoare.

Articole recomandate

Acesta este un ghid pentru indicatorii în C ++. Aici vom discuta despre cum se creează indicatoare în C ++ cu exemplele și rezultatele date și de ce avem nevoie. De asemenea, puteți consulta următorul curs de analiză a datelor pentru a afla mai multe

  1. Poșteri în Python
  2. Tipuri de date în C
  3. Arătări în C ++
  4. Modele de stele în c ++
  5. Cum funcționează pointerii în C #?