Razmerje med nizi in kazalci pri programiranju na C (z primeri)

V tej vadnici boste spoznali razmerje med nizi in kazalci pri programiranju na C. Naučili se boste tudi dostopati do elementov matrike s kazalci.

Preden se naučite odnosa med polji in kazalci, preverite ti dve temi:

  • C Nizki
  • C Kazalci

Razmerje med nizi in kazalci

Matrika je blok zaporednih podatkov. Napišimo program za tiskanje naslovov elementov matrike.

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

Izhod

 & x (0) = 1450734448 & x (1) = 1450734452 & x (2) = 1450734456 & x (3) = 1450734460 Naslov matrike x: 1450734448 

Med dvema zaporednima elementoma polja x je razlika 4 bajtov. To je zato, ker je velikost int4 bajtov (na našem prevajalniku).

Upoštevajte, da je naslov & x (0) in x enak. To je zato, ker ime spremenljivke x kaže na prvi element matrike.

Iz zgornjega primera je razvidno, da &x(0)je enakovredno x. In x(0)je enakovredno *x.

Podobno,

  • &x(1)je enakovredno x+1in x(1)je enakovredno *(x+1).
  • &x(2)je enakovredno x+2in x(2)je enakovredno *(x+2).
  • V bistvu &x(i)je enakovredno x+iin x(i)je enakovredno *(x+i).

Primer 1: Kazalci in nizi

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

Ko zaženete program, bo rezultat:

 Vnesite 6 številk: 2 3 4 4 12 4 Vsota = 29 

Tu smo razglasili polje x 6 elementov. Za dostop do elementov polja smo uporabili kazalce.

V večini kontekstov imena matrik upadajo do kazalcev. Z enostavnimi besedami se imena nizov pretvorijo v kazalce. To je razlog, zakaj lahko s kazalci dostopate do elementov nizov. Ne pozabite pa, da kazalci in nizi niso enaki .

Obstaja nekaj primerov, ko imena nizov ne upadajo v kazalce. Če želite izvedeti več, obiščite: Kdaj ime polja ne propade v kazalec?

Primer 2: Polja in kazalci

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

Ko zaženete program, bo rezultat:

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

V tem primeru &x(2)je naslov tretjega elementa dodeljen kazalcu ptr. Zato je 3bilo prikazano, ko smo tiskali *ptr.

Tiskanje *(ptr+1)nam daje četrti element. Podobno *(ptr-1)nam tisk daje drugi element.

Zanimive Članki...