Pointeri C (cu exemple)

În acest tutorial, veți afla despre indicii; ce indicații sunt, cum le folosești și greșelile obișnuite cu care te-ai putea confrunta atunci când lucrezi cu ele cu ajutorul exemplelor.

Pointerele sunt caracteristici puternice ale programării C și C ++. Înainte de a învăța indicii, să învățăm despre adresele din programarea C.

Adresa în C

Dacă aveți o variabilă var în program, vă &varva da adresa acesteia în memorie.

Am folosit adresa de mai multe ori în timp ce foloseam scanf()funcția.

 scanf("%d", &var);

Aici, valoarea introdusă de utilizator este stocată în adresa variabilei var. Să luăm un exemplu de lucru.

 #include int main() ( int var = 5; printf("var: %d", var); // Notice the use of & before var printf("address of var: %p", &var); return 0; ) 

Ieșire

 var: 5 adresa var: 2686778

Notă: probabil că veți obține o adresă diferită atunci când rulați codul de mai sus.

C Pointeri

Pointerele (variabilele pointer) sunt variabile speciale care sunt folosite pentru a stoca adrese mai degrabă decât valori.

Sintaxa indicatorului

Iată cum putem declara indicii.

 int* p;

Aici, am declarat un indicator p de inttip.

De asemenea, puteți declara indicii în aceste moduri.

 int *p1; int * p2; 

Să luăm un alt exemplu de declarare a indicilor.

 int* p1, p2;

Aici, am declarat un pointer p1 și o variabilă normală p2.

Atribuirea adreselor către indicatori

Să luăm un exemplu.

 int* pc, c; c = 5; pc = &c; 

Aici, 5 este atribuit variabilei c. Și, adresa lui c este atribuită indicatorului PC.

Obțineți valoarea lucrului indicat de indicatori

Pentru a obține valoarea lucrului indicat de indicatori, folosim *operatorul. De exemplu:

 int* pc, c; c = 5; pc = &c; printf("%d", *pc); // Output: 5

Aici, adresa lui ceste atribuită indicatorului PC. Pentru a obține valoarea stocată în acea adresă, am folosit * pc.

Notă: În exemplul de mai sus, pc nu este un pointer *pc. Nu poți și nu trebuie să faci ceva de genul *pc = &c;

Apropo, *se numește operator de dereferență (atunci când se lucrează cu pointeri). Funcționează pe un pointer și oferă valoarea stocată în acel pointer.

Modificarea valorii indicată de indicatori

Să luăm un exemplu.

 int* pc, c; c = 5; pc = &c; c = 1; printf("%d", c); // Output: 1 printf("%d", *pc); // Ouptut: 1

Am atribuit adresa lui c pointerului computerului.

Apoi, am schimbat valoarea lui c la 1. Deoarece pc și adresa lui c sunt aceleași, *pcne dă 1.

Să luăm un alt exemplu.

 int* pc, c; c = 5; pc = &c; *pc = 1; printf("%d", *pc); // Ouptut: 1 printf("%d", c); // Output: 1 

Am atribuit adresa lui c pointerului computerului.

Apoi, am trecut *pcla 1 folosind *pc = 1;. Deoarece pc și adresa lui c sunt aceleași, c va fi egal cu 1.

Să luăm încă un exemplu.

 int* pc, c, d; c = 5; d = -15; pc = &c; printf("%d", *pc); // Output: 5 pc = &d; printf("%d", *pc); // Ouptut: -15

Inițial, adresa lui c este atribuită indicatorului PC folosind pc = &c;. Deoarece c este 5, *pcne dă 5.

Apoi, adresa lui d este atribuită indicatorului PC folosind pc = &d;. Deoarece d este -15, *pcne dă -15.

Exemplu: Lucrul indicatoarelor

Să luăm un exemplu de lucru.

 #include int main() ( int* pc, c; c = 22; printf("Address of c: %p", &c); printf("Value of c: %d", c); // 22 pc = &c; printf("Address of pointer pc: %p", pc); printf("Content of pointer pc: %d", *pc); // 22 c = 11; printf("Address of pointer pc: %p", pc); printf("Content of pointer pc: %d", *pc); // 11 *pc = 2; printf("Address of c: %p", &c); printf("Value of c: %d", c); // 2 return 0; ) 

Ieșire

 Adresa c: 2686784 Valoarea c: 22 Adresa computerului pointer: 2686784 Conținutul computerului pointer: 22 Adresa computerului pointer: 2686784 Conținutul computerului pointer: 11 Adresa c: 2686784 Valoarea c: 2 

Explicația programului

  1. int* pc, c;

    Here, a pointer pc and a normal variable c, both of type int, is created.
    Since pc and c are not initialized at initially, pointer pc points to either no address or a random address. And, variable c has an address but contains random garbage value.
  2. c = 22;

    This assigns 22 to the variable c. That is, 22 is stored in the memory location of variable c.
  3. pc = &c;

    This assigns the address of variable c to the pointer pc.
  4. c = 11;

    This assigns 11 to variable c.
  5. *pc = 2;

    This change the value at the memory location pointed by the pointer pc to 2.

Common mistakes when working with pointers

Suppose, you want pointer pc to point to the address of c. Then,

 int c, *pc; // pc is address but c is not pc = c; // Error // &c is address but *pc is not *pc = &c; // Error // both &c and pc are addresses pc = &c; // both c and *pc values *pc = c;

Here's an example of pointer syntax beginners often find confusing.

 #include int main() ( int c = 5; int *p = &c; printf("%d", *p); // 5 return 0; )

Why didn't we get an error when using int *p = &c;?

It's because

 int *p = &c;

is equivalent to

 int *p: p = &c;

În ambele cazuri, creăm un pointer p(nu *p) și îi atribuim &c.

Pentru a evita această confuzie, putem folosi afirmația astfel:

 int* p = &c;

Acum știți ce sunt indicatoarele, veți afla cum sunt asociate indicatoarele cu matricele în următorul tutorial.

Articole interesante...