pointers pointer operations c
Un studiu intensiv al indicatorilor și al utilizărilor lor în C ++.
Un Pointer este una dintre cele mai puternice caracteristici ale limbajului C ++. Un indicator ajută la manipularea variabilelor prin adresa sa.
Întrebări și răspunsuri la interviu pentru testarea soapui
În acest tutorial, vom explora în detaliu toate indicațiile și utilizările sale în C ++.
=> Urmăriți aici seria de antrenament C ++ simplă.
Ce veți învăța:
- Ce este un indicator?
- Aritmetica indicatorului
- Indicii Null And Void
- Matrice și indicatoare
- Matrice de indicatori
- Pointer Of Pointers
- Trecerea indicatorilor către funcții
- Funcții Pointer
- Concluzie
- Lectură recomandată
Ce este un indicator?
Un indicator este o variabilă care deține adresa unei locații de memorie. Știm că toate variabilele pe care le declarăm au o adresă specifică în memorie. Declarăm o variabilă de pointer pentru a indica aceste adrese în memorie.
Sintaxa generală pentru declararea unei variabile pointer este:
datatype * variable_name;
De exemplu, declarația int* ptr;
Aceasta înseamnă că ptr este un pointer care indică o variabilă de tip int. Prin urmare, o variabilă pointer conține întotdeauna o locație sau o adresă de memorie. Să vedem mai jos funcționarea variabilelor pointer.
Luați în considerare că avem următoarele declarații:
Int p, *ptr; //declare variable p and pointer variable ptr p = 4; //assign value 4 to variable p ptr = &p; //assign address of p to pointer variable ptr
În memorie, aceste declarații vor fi reprezentate după cum urmează:
Aceasta este reprezentarea internă a indicatorului în memorie. Când atribuim variabila de adresă variabilei pointer, aceasta indică variabila așa cum se arată în reprezentarea de mai sus.
Deoarece ptr are o adresă de variabilă p, * ptr va da valoarea variabilei p (variabilă spre care indică variabila pointer ptr).
Notă: Operatorul * pe care îl folosim cu pointerul este folosit pentru a indica faptul că este o variabilă pointer.
Să vedem câteva dintre conceptele de pointer care sunt utilizate în C ++.
Aritmetica indicatorului
Știm că o variabilă pointer indică întotdeauna adresa din memorie. Printre operațiunile pe care le putem efectua, avem următoarele operații aritmetice care sunt efectuate pe pointeri.
- Operator de creștere (++)
- Operator decrement (-)
- Adăugare (+)
- Scădere (-)
Să vedem utilizarea acestor operațiuni într-un exemplu de program.
#include #include using namespace std; int main() { int myarray(5) = {2, 4,6, 8,10}; int* myptr; myptr = myarray; cout<<'First element in the array :'<<*myptr< Ieșire:
Primul element din matrice: 2
următorul element din matrice: 4
următorul element din matrice: 6
următorul element din matrice: 4
următorul element din matrice: 2
Am văzut operațiile aritmetice efectuate pe pointeri. Rețineți că operatorul de incrementare ++ crește indicatorul și indică următorul element din matrice. În mod similar, operatorul de decrement descrește variabila indicator cu 1 astfel încât să indice elementul anterior din matrice.
De asemenea, folosim operatorii + și -. În primul rând, am adăugat 1 la variabila pointer. Rezultatul arată că indică următorul element din matrice. În mod similar, operatorul - face ca variabila pointer să indice elementul anterior din matrice.
În afară de acești operatori aritmetici, putem folosi și operatori de comparație precum ==,.
Indicii Null And Void
Dacă în cazul unei variabile pointer nu i se atribuie adresa unei variabile, atunci este o practică bună să atribuiți o valoare NULL variabilei pointer. Variabila pointer cu o valoare NULL se numește pointer NULL.
cum se elimină elementul din matricea java
Un indicator nul este un indicator constant cu valoarea zero definită în antetul iostream. Memoria la adresa 0 este rezervată de sistemul de operare și nu putem accesa această locație.
Folosind indicatorul nul, putem evita utilizarea greșită a indicatorilor neutilizați și putem preveni ca variabilele indicatorului să aibă atribuite unele valori de gunoi.
Indicatorii de vid sunt indicii speciali care indică valorile fără tip. Indicatoarele de gol sunt mai flexibile, deoarece pot indica orice tip. Dar ele nu pot fi dereferențiate direct. Pentru dereferențiere, indicatorul gol trebuie să fie convertit într-un indicator care indică o valoare cu tipul concret de date.
Am arătat funcționarea indicatorului NULL și a indicatorului void în următorul cod Exemplu.
#include #include using namespace std; int main() { int intvar = 10; char c = 'A'; void* vptr; int* myptr = NULL; cout<<'NULL pointer value :'< Ieșire:
Valoarea indicatorului NULL: 0
Indicatorul gol vptr indică către: A
Indicatorul gol vptr indică către: 10
În programul de mai sus, declarăm mai întâi un indicator întreg căruia i se atribuie o valoare NULL. Când tipărim acest indicator, vedem că valoarea este 0 așa cum am discutat mai devreme.
Apoi, declarăm un pointer nul. În primul rând, atribuim o adresă a variabilei de caracter acestui pointer gol. Apoi atribuim un pointer gol unui pointer de caractere și îl tipărim cu char *. Apoi, imprimăm valoarea charptr care indică caracterul A, care a fost o variabilă de caracter pe care am declarat-o mai devreme și este indicată de indicatorul gol.
Apoi, am atribuit o variabilă întreagă indicatorului gol și apoi efectuăm aceiași pași de dereferențiere a acestui indicator gol folosind un indicator întreg.
Matrice și indicatoare
Tablourile și indicatoarele sunt puternic asociate unele cu altele. Știm că numele matricei indică primul element din matrice și acesta este un indicator constant.
Putem atribui acest pointer unei variabile de pointer și apoi să accesăm matricea fie prin decrementarea indicatorului, fie prin utilizarea operatorului de indice.
Vom vedea această asociere între variabila pointer și matrice în următorul cod Exemplu.
#include #include using namespace std; int main() { int myarray(5) = {1, 1, 2, 3, 5}; int* ptrvar; ptrvar = myarray; for(int i=0;i<5;i++) { cout<<*ptrvar<<' '; ptrvar++; } return 0; }
Ieșire:
1 1 2 3 5
În programul de mai sus, atribuim numele matricei unei variabile pointer. Pe măsură ce numele matricei indică primul element din matrice, putem imprima conținutul întregii matrice utilizând o variabilă pointer și o putem incrementa folosind operatorul ++. Acest lucru este afișat în ieșire.
Matrice de indicatori
Uneori, avem nevoie de mai multe variabile de pointer într-un program. În loc să declarăm fiecare variabilă individuală a indicatorului, putem declara o serie de indicatori.
Să luăm imediat un exemplu pentru a demonstra o serie de indicatori.
#include #include using namespace std; int main() { int myarray(5) = {2,4,6,8,10}; int *ptr(5); //array of pointers for(int i=0;i<5;i++){ ptr(i) = &myarray(i); } for (int i = 0; i < 5; i++) { cout << 'Value of myarray(' << i << ') = '; cout << *ptr(i) << endl; } return 0; }
Ieșire:
Valoarea myarray-ului (0) = 2
Valoarea myarray-ului (1) = 4
Valoarea myarray-ului (2) = 6
Valoarea myarray-ului (3) = 8
Valoarea myarray-ului (4) = 10
În declarația de mai sus,
int *ptr(5);
Putem interpreta ca; ptr este o matrice de 5 indicatori întregi. Prin urmare, fiecare element al ptr va indica o variabilă de tip întreg.
Folosim un tablou întreg și atribuim adresa fiecărui element al tabloului fiecăruia dintre elementele ptr. Apoi afișăm conținutul matricei ptr prin afișarea „* ptr (i)”.
Pointer Of Pointers
Indicatorul indicatoarelor nu este altceva decât indirecte multiple. Este un fel de lanț de indicatori. Când definim un pointer de pointeri, primul pointer are o adresă a celui de-al doilea pointer, care, la rândul său, are adresa variabilei către care arată.
În memorie, acest lucru va fi reprezentat ca:

Un indicator de indicatori este declarat după cum urmează:
int** intptr;
Luăm direct un exemplu de cod pentru a înțelege mai bine indicatorul pointerilor.
#include #include using namespace std; int main() { int *vptr; int ** intptr; int var = 10; vptr = &var; intptr = &vptr; cout<<'Variable var: '< Ieșire:
Variabila variabilă: 10
Pointer către variabilă: 10
Pointer to Pointer către o variabilă: 10
În programul de mai sus, declarăm o variabilă întreagă, un indicator întreg și un indicator al unui indicator către un număr întreg. După cum se arată în program, variabilei pointer i se atribuie valoarea unei variabile. Pointerul variabilei pointer este atribuit adresei variabilei pointer.
La final, imprimăm cele trei variabile care afișează aceeași valoare 10 egală cu o variabilă întreagă.
Trecerea indicatorilor către funcții
Trecerea indicatorilor pentru funcționare este aceeași cu alte tehnici de trecere a parametrilor în care trecem variabilele pointerului la funcție.
Revizuim schimbarea celor două valori și o modificăm pentru a trece variabilele pointer ca parametri.
#include #include using namespace std; void swap(int* a, int* b) { int temp; temp = *a; *a = *b; *b = temp; } int main() { int a, b; cout<>a>>b; cout<<'a = '< Ieșire:
Introduceți valorile care trebuie schimbate: 3 2
a = 3 b = 2
Valori schimbate
a = 2 b = 3
Așa cum se arată în program, trecem valorile care trebuie schimbate ca variabile întregi. Parametrii formali sunt definiți ca variabile de pointer. Ca urmare, modificările aduse variabilelor din interiorul funcțiilor sunt reflectate și în funcția de apelare.
Funcții Pointer
în același mod, deoarece avem indicatori pentru variabile, tablouri etc., putem avea și indicatori pentru funcții. Dar diferența este că indicatorul funcției indică spre codul executabil și nu către date precum variabile sau tablouri.
Luăm un exemplu pentru a demonstra indicatorii de funcție.
#include #include using namespace std; void displayVal(int a) { printf('Value of a is %d
', a); } int main() { void (*func_ptr)(int) = &displayVal; (*func_ptr)(100); return 0; }
Ieșire:
Valoarea a este 100
de ce este necesar să rulați un program folosind datele de testare pentru introducere?
În programul de mai sus, avem o funcție „displayVal” care tipărește doar o valoare întreagă transmisă. În funcția principală, am definit un pointer de funcție „func_ptr” care ia un int ca argument și returnează un tip nul.
void (*func_ptr)(int)
Notă: Trebuie să închidem indicatorul funcțional în interiorul (). Dacă îl omitem, acesta va deveni un prototip de funcție.
Am atribuit adresa funcției ‘displayVal’ acestui indicator de funcție. Apoi, folosind pointerul funcției „func_ptr”, trecem valoarea argumentului 100, care este echivalentă cu apelarea displayVal cu argumentul 100.
Acum, dacă avem o altă funcție cu același prototip, atunci putem folosi același indicator de funcție atribuindu-i adresa funcției. Aceasta este utilizarea majoră a indicatorilor de funcții.
Concluzie
Aceasta este totul despre indicii, definițiile și utilizările sale în C ++.
În următorul nostru tutorial, vom afla mai multe despre referințele în C ++. Referințele au, de asemenea, o utilizare specială în C ++ și sunt adesea folosite ca aliasuri pentru variabile.
=> Faceți clic aici pentru seria Absolute C ++ Training.
Lectură recomandată