Masyvų ir rodyklių ryšys programuojant C (su pavyzdžiais)

Šioje pamokoje sužinosite apie masyvų ir rodyklių santykį programuodami C. Jūs taip pat išmoksite pasiekti masyvo elementus naudodamiesi rodyklėmis.

Prieš sužinodami apie masyvų ir žymeklių santykį, būtinai patikrinkite šias dvi temas:

  • C masyvai
  • C Rodyklės

Masyvų ir rodyklių santykis

Masyvas yra nuoseklių duomenų blokas. Parašykime programą masyvo elementų adresams spausdinti.

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

Rezultatas

 & x (0) = 1450734448 & x (1) = 1450734452 & x (2) = 1450734456 & x (3) = 1450734460 Masyvo x adresas: 1450734448 

Tarp dviejų vienas po kito einančių masyvo x elementų yra 4 baitų skirtumas. Taip yra todėl, kad dydis intyra 4 baitai (mūsų kompiliatoriuje).

Atkreipkite dėmesį, kad & x (0) ir x adresas yra tas pats. Taip yra todėl, kad kintamojo vardas x rodo pirmąjį masyvo elementą.

Iš aukščiau pateikto pavyzdžio aišku, kad jis &x(0)yra lygiavertis x. Ir x(0)yra lygiavertis *x.

Panašiai

  • &x(1)yra lygiavertis x+1ir x(1)yra lygiavertis *(x+1).
  • &x(2)yra lygiavertis x+2ir x(2)yra lygiavertis *(x+2).
  • Iš esmės &x(i)yra lygiavertis x+iir x(i)yra lygiavertis *(x+i).

1 pavyzdys: žymekliai ir masyvai

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

Kai paleisite programą, išvestis bus:

 Įveskite 6 skaičius: 2 3 4 4 12 4 Suma = 29 

Čia mes paskelbėme 6 elementų masyvą x. Norėdami pasiekti masyvo elementus, naudojome rodykles.

Daugumoje atvejų masyvų pavadinimai suyra į rodykles. Paprastais žodžiais, masyvo pavadinimai paverčiami rodyklėmis. Tai priežastis, kodėl galite naudoti rodykles, kad pasiektumėte masyvų elementus. Tačiau turėtumėte prisiminti, kad žymekliai ir masyvai nėra vienodi .

Yra keletas atvejų, kai masyvo pavadinimai neskaidomi į rodykles. Norėdami sužinoti daugiau, apsilankykite: Kada masyvo pavadinimas nesuyra į rodyklę?

2 pavyzdys: masyvai ir rodyklės

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

Kai paleisite programą, išvestis bus:

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

Šiame pavyzdyje &x(2)trečiojo elemento adresas priskiriamas ptr žymekliui. Vadinasi, 3buvo rodomas, kai spausdinome *ptr.

Spauda *(ptr+1)suteikia mums ketvirtą elementą. Panašiai spausdinimas *(ptr-1)suteikia mums antrąjį elementą.

Įdomios straipsniai...