Saikne starp masīviem un rādītājiem C programmēšanā (ar piemēriem)

Šajā apmācībā jūs uzzināsit par masīvu un norāžu attiecībām C programmēšanā. Jūs arī iemācīsities piekļūt masīva elementiem, izmantojot rādītājus.

Pirms uzzināt par masīvu un rādītāju attiecībām, noteikti pārbaudiet šīs divas tēmas:

  • C Masīvi
  • C Norādes

Attiecības starp masīviem un rādītājiem

Masīvs ir secīgu datu bloks. Uzrakstīsim programmu masīva elementu adrešu drukāšanai.

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

Rezultāts

 & x (0) = 1450734448 & x (1) = 1450734452 & x (2) = 1450734456 & x (3) = 1450734460 Masīva x adrese: 1450734448 

Starp diviem secīgiem masīva x elementiem ir 4 baitu starpība. Tas ir tāpēc, ka lielums intir 4 baiti (mūsu kompilatorā).

Ievērojiet, ka & x (0) un x adrese ir vienāda. Tas ir tāpēc, ka mainīgā nosaukums x norāda uz masīva pirmo elementu.

No iepriekš minētā piemēra ir skaidrs, ka tas &x(0)ir ekvivalents x. Un x(0)ir līdzvērtīgs *x.

Līdzīgi

  • &x(1)ir ekvivalents x+1un x(1)ir ekvivalents *(x+1).
  • &x(2)ir ekvivalents x+2un x(2)ir ekvivalents *(x+2).
  • Būtībā &x(i)ir ekvivalents x+iun x(i)ir ekvivalents *(x+i).

1. piemērs: rādītāji un masīvi

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

Palaidot programmu, izeja būs:

 Ievadiet 6 ciparus: 2 3 4 4 12 4 Summa = 29 

Šeit mēs esam deklarējuši masīvu x no 6 elementiem. Lai piekļūtu masīva elementiem, mēs izmantojām rādītājus.

Vairumā gadījumu masīvu nosaukumi sadalās līdz rādītājiem. Vienkāršos vārdos masīvu nosaukumi tiek pārveidoti par rādītājiem. Tas ir iemesls, kāpēc jūs varat izmantot rādītājus, lai piekļūtu masīvu elementiem. Tomēr jums jāatceras, ka rādītāji un masīvi nav vienādi .

Ir daži gadījumi, kad masīvu nosaukumi nesadalās līdz rādītājiem. Lai uzzinātu vairāk, apmeklējiet vietni: Kad masīva nosaukums nesadalās rādītājā?

2. piemērs: Masīvi un rādītāji

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

Palaidot programmu, izeja būs:

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

Šajā piemērā &x(2)ptr rādītājam tiek piešķirta trešā elementa adrese. Tādējādi 3tika parādīts, kad mēs drukājām *ptr.

Drukāšana *(ptr+1)dod mums ceturto elementu. Līdzīgi drukāšana *(ptr-1)dod mums otro elementu.

Interesanti raksti...