Vzťah medzi poliami a ukazovateľmi v programovaní v C (s príkladmi)

V tomto tutoriáli sa dozviete o vzťahu medzi poliami a ukazovateľmi v programovaní C. Naučíte sa tiež prístup k prvkom poľa pomocou ukazovateľov.

Predtým, ako sa dozviete o vzťahu medzi poliami a ukazovateľmi, nezabudnite si prečítať tieto dve témy:

  • C polia
  • C Ukazovatele

Vzťah medzi poliami a ukazovateľmi

Pole je blok postupných údajov. Poďme napísať program na tlač adries prvkov poľa.

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

Výkon

 & x (0) = 1450734448 & x (1) = 1450734452 & x (2) = 1450734456 & x (3) = 1450734460 Adresa poľa x: 1450734448 

Medzi dvoma po sebe nasledujúcimi prvkami poľa x je rozdiel 4 bajty. Je to preto, že veľkosť intje 4 bajty (na našom kompilátore).

Všimnite si, že adresa & x (0) a x je rovnaká. Je to preto, lebo názov premennej x smeruje na prvý prvok poľa.

Z vyššie uvedeného príkladu je zrejmé, že &x(0)sa rovná x. A x(0)je ekvivalentné s *x.

Podobne

  • &x(1)je ekvivalentom x+1a x(1)je ekvivalentom k *(x+1).
  • &x(2)je ekvivalentom x+2a x(2)je ekvivalentom k *(x+2).
  • V zásade &x(i)je ekvivalentom x+ia x(i)je ekvivalentom k *(x+i).

Príklad 1: Ukazovatele a polia

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

Po spustení programu bude výstup:

 Zadajte 6 čísel: 2 3 4 4 12 4 Súčet = 29 

Tu sme deklarovali pole x 6 prvkov. Na prístup k prvkom poľa sme použili ukazovatele.

Vo väčšine kontextov sa názvy polí rozpadajú na ukazovatele. Jednoduchými slovami sa názvy polí prevádzajú na ukazovatele. To je dôvod, prečo môžete použiť ukazovatele na prístup k prvkom polí. Mali by ste však pamätať na to, že ukazovatele a polia nie sú rovnaké .

Existuje niekoľko prípadov, keď sa názvy polí nerozpadajú na ukazovatele. Ak sa chcete dozvedieť viac, navštívte: Kedy sa názov poľa nerozpadá na ukazovateľ?

Príklad 2: Polia a ukazovatele

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

Po spustení programu bude výstup:

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

V tomto príklade &x(2)je adrese tretieho prvku priradená ukazovateľ ptr. Preto 3sa zobrazilo, keď sme tlačili *ptr.

A tlač *(ptr+1)nám dáva štvrtý prvok. Podobne *(ptr-1)nám tlač dáva druhý prvok.

Zaujímavé články...