Relația dintre tablouri și indicatori în programarea C (cu exemple)

În acest tutorial, veți afla despre relația dintre tablouri și indicatori în programarea C. De asemenea, veți învăța să accesați elementele matricei folosind pointeri.

Înainte de a afla despre relația dintre tablouri și indicatori, asigurați-vă că verificați aceste două subiecte:

  • C Matrice
  • C Pointeri

Relația dintre tablouri și indicatori

O matrice este un bloc de date secvențiale. Să scriem un program pentru a imprima adresele elementelor matrice.

 #include int main() ( int x(4); int i; for(i = 0; i < 4; ++i) ( printf("&x(%d) = %p", i, &x(i)); ) printf("Address of array x: %p", x); return 0; ) 

Ieșire

 & x (0) = 1450734448 & x (1) = 1450734452 & x (2) = 1450734456 & x (3) = 1450734460 Adresa matricei x: 1450734448 

Există o diferență de 4 octeți între două elemente consecutive ale tabloului x. Acest lucru se datorează faptului că dimensiunea lui inteste de 4 octeți (pe compilatorul nostru).

Observați că, adresa lui & x (0) și x este aceeași. Acest lucru se datorează faptului că numele variabilei x indică primul element al matricei.

Din exemplul de mai sus, este clar că &x(0)este echivalent cu x. Și, x(0)este echivalent cu *x.

În mod similar,

  • &x(1)este echivalent cu x+1și x(1)este echivalent cu *(x+1).
  • &x(2)este echivalent cu x+2și x(2)este echivalent cu *(x+2).
  • Practic, &x(i)este echivalent cu x+iși x(i)este echivalent cu *(x+i).

Exemplul 1: Pointeri și tablouri

 #include int main() ( int i, x(6), sum = 0; printf("Enter 6 numbers: "); for(i = 0; i < 6; ++i) ( // Equivalent to scanf("%d", &x(i)); scanf("%d", x+i); // Equivalent to sum += x(i) sum += *(x+i); ) printf("Sum = %d", sum); return 0; ) 

Când rulați programul, ieșirea va fi:

 Introduceți 6 numere: 2 3 4 4 12 4 Suma = 29 

Aici, am declarat o matrice x de 6 elemente. Pentru a accesa elementele matricei, am folosit pointeri.

În majoritatea contextelor, numele matricilor se descompun în indicatori. În cuvinte simple, numele matricelor sunt convertite în indicatori. Acesta este motivul pentru care puteți utiliza indicii pentru a accesa elemente de matrice. Cu toate acestea, ar trebui să vă amintiți că indicii și matrice nu sunt la fel .

Există câteva cazuri în care numele matricilor nu se descompun în indicatori. Pentru a afla mai multe, vizitați: Când numele matricei nu se descompune într-un pointer?

Exemplul 2: tablouri și indicatoare

 #include int main() ( int x(5) = (1, 2, 3, 4, 5); int* ptr; // ptr is assigned the address of the third element ptr = &x(2); printf("*ptr = %d ", *ptr); // 3 printf("*(ptr+1) = %d ", *(ptr+1)); // 4 printf("*(ptr-1) = %d", *(ptr-1)); // 2 return 0; )

Când rulați programul, ieșirea va fi:

 * ptr = 3 * (ptr + 1) = 4 * (ptr-1) = 2

În acest exemplu, &x(2)adresa celui de-al treilea element este atribuită indicatorului ptr. Prin urmare, a 3fost afișat când am tipărit *ptr.

Și tipărirea *(ptr+1)ne oferă al patrulea element. În mod similar, tipărirea *(ptr-1)ne oferă al doilea element.

Articole interesante...