Pointeri în programarea C cu exemple
Un pointer este o variabilă care stochează adresa unei alte variabile. Spre deosebire de alte variabile care dețin valori de un anumit tip, indicatorul deține adresa unei variabile. De exemplu, o variabilă întreagă deține (sau puteți spune că stochează) o valoare întreagă, cu toate acestea un indicator întreg deține adresa unei variabile întregi. În acest ghid, vom discuta despre indicii în programarea C cu ajutorul exemplelor.
Înainte de a discuta despre indicii în C, să luăm un exemplu simplu pentru a înțelege la ce ne referim prin adresa unei variabile.
Un exemplu simplu pentru a înțelege cum se accesează adresa unei variabile fără pointeri?
În acest program, avem un număr variabil de tip int. Valoarea num este 10 și această valoare trebuie stocată undeva în memorie, nu? Un spațiu de memorie este alocat pentru fiecare variabilă care deține valoarea acelei variabile, acest spațiu de memorie are o adresă. De exemplu, locuim într-o casă, iar casa noastră are o adresă, care ajută alte persoane să ne găsească casa. În același mod în care valoarea variabilei este stocată într-o adresă de memorie, ceea ce ajută programul C să găsească acea valoare atunci când este nevoie.
Deci, să presupunem că adresa atribuită variabilei num este 0x7fff5694dc58
, ceea ce înseamnă că orice valoare ar fi atribuită lui num ar trebui stocată la locația: 0x7fff5694dc58
. Vedeți diagrama de mai jos.
Ieșire:
Value of variable num is: 10Address of variable num is: 0x7fff5694dc58
Un exemplu simplu de pointeri în C
Acest program arată cum este declarat și utilizat un pointer. Există câteva alte lucruri pe care le putem face cu indicii, le-am discutat mai târziu în acest ghid. Pentru moment, trebuie doar să știm cum să legăm un pointer la adresa unei variabile.
Un punct important de reținut este: Tipul de date al indicatorului iar variabila trebuie să se potrivească, un pointer int poate păstra adresa variabilei int, în mod similar un pointer declarat cu tip de date float poate deține adresa unei variabile float. În exemplul de mai jos, indicatorul și variabila sunt ambele de tip int.
Ieșire:
Address of variable num is: 0x7fff5694dc58
C Pointers – Operatori care sunt utilizați cu Pointers
Permiteți să discutăm operatorii & și * care sunt folosiți cu Pointers în C.
„Adresa” (&) Operator
Am văzut deja în primul exemplu că putem afișa adresa unei variabile folosind ampersand semn. Am folosit & num pentru a accesa adresa variabilei num. Operatorul & este, de asemenea, cunoscut sub numele de „Adresa operatorului”.
printf("Address of var is: %p", &num);
Punct de reținut:% p este un specificator de format care este utilizat pentru afișarea adresei în format hex.
Acum că știi cum să obții adresa unei variabile, dar cum să stochezi acea adresă într-o altă variabilă? Acolo indicatorii intră în imagine. Așa cum am menționat la începutul acestui ghid, indicatorii din programarea C sunt utilizați pentru păstrarea adresei altor variabile.
Pointerul este exact ca o altă variabilă, diferența principală este că stochează adresa unei alte variabile, mai degrabă decât o valoare.
Operatorul „Value at Address” (*)
Operatorul * este, de asemenea, cunoscut sub numele de operator Value at address.
Cum să declarați un pointer ?
Cele de mai sus sunt câteva exemple de declarații ale indicatorului. Dacă aveți nevoie de un indicator pentru a stoca adresa variabilei întregi, atunci tipul de date al indicatorului ar trebui să fie int. Același caz este cu celelalte tipuri de date.
Prin utilizarea operatorului * putem accesa valoarea unei variabile printr-un pointer.
De exemplu:
double a = 10;double *p;p = &a;
* p ne-ar da valoarea variabilei a. Următoarea afirmație ar afișa 10 ca ieșire.
printf("%d", *p);
În mod similar, dacă atribuim o valoare pointerului * astfel:
*p = 200;
Ar schimba valoarea lui v ariabil a. Afirmația de mai sus va schimba valoarea a de la 10 la 200.
Exemplu de Pointer care demonstrează utilizarea & și *
Output :
Value of variable var is: 10Value of variable var is: 10Address of variable var is: 0x7fff5ed98c4cAddress of variable var is: 0x7fff5ed98c4cAddress of pointer p is: 0x7fff5ed98c50
Să luăm câteva exemple pentru a o înțelege mai bine –
Să spunem că avem o variabilă char ch și un pointer ptr care deține adresa ch.
char ch="a";char *ptr;
Citiți valoarea ch
printf("Value of ch: %c", ch);orprintf("Value of ch: %c", *ptr);
Schimbați valoarea ch
ch = "b";or*ptr = "b";
Codul de mai sus ar înlocui valoarea a cu b .
Puteți ghici rezultatul următorului program C?
Ieșire:
Address of var is: 0x7fff5d027c58Address of var is: 0x7fff5d027c58Value of var is: 10Value of var is: 10Value of var is: 10Value of pointer p is: 0x7fff5d027c58Address of pointer p is: 0x7fff5d027c50
Mai multe subiecte pe pointeri
1) Pointer to Pointer – Un pointer poate indica un alt pointer (ceea ce înseamnă că poate stoca adresa unui alt pointer), astfel de pointeri sunt cunoscuți sub numele de pointer dublu SAU pointer to pointer.
2) Trecerea pointerilor către funcție – Pointerii pot fi, de asemenea, transferați ca argument către o funcție, folosind această caracteristică, o funcție poate fi apelată prin referință, precum și o matrice poate fi transmisă unei funcții în timpul apelului.
3) Indicatori de funcție – Un indicator de funcție este la fel ca un alt indicator, este utilizat pentru stocarea adresei unei funcții. Pointerul funcțional poate fi utilizat și pentru apelarea unei funcții în programul C.