Massiivide ja osutite suhe C-programmeerimisel (koos näidetega)

Lang L: none (table-of-contents)

Selles õpetuses saate teada massiivide ja osutite suhetest C-programmeerimisel. Samuti õpitakse massiivielementidele juurde pääsema, kasutades selleks osuteid.

Enne massiivide ja osutite vaheliste seoste tundmaõppimist kontrollige kindlasti neid kahte teemat:

  • C Massiivid
  • C Näpunäited

Massiivide ja osutite suhe

Massiiv on järjestikuste andmete plokk. Kirjutame massiivi elementide aadresside printimiseks programmi.

 #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äljund

 & x (0) = 1450734448 & x (1) = 1450734452 & x (2) = 1450734456 & x (3) = 1450734460 Massiivi x aadress: 1450734448 

Massiivi x kahe järjestikuse elemendi vahel on 4 baiti vahe. Seda seetõttu, et suurus inton 4 baiti (meie kompilaatoril).

Pange tähele, et & x (0) ja x aadress on sama. Selle põhjuseks on asjaolu, et muutuja nimi x osutab massiivi esimesele elemendile.

Ülaltoodud näite põhjal on selge, et see &x(0)on samaväärne x-ga. Ja x(0)on samaväärne *x.

Samamoodi

  • &x(1)on samaväärne x+1ja x(1)on samaväärne *(x+1).
  • &x(2)on samaväärne x+2ja x(2)on samaväärne *(x+2).
  • Põhimõtteliselt &x(i)on samaväärne x+ija x(i)samaväärne *(x+i).

Näide 1: kursorid ja massiivid

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

Programmi käivitamisel on väljund järgmine:

 Sisestage 6 numbrit: 2 3 4 4 12 4 Summa = 29 

Siin oleme deklareerinud massiivi x 6 elemendist. Massiivi elementidele juurde pääsemiseks oleme kasutanud osuteid.

Enamikus kontekstides lagunevad massiivinimed osutiteni. Lihtsate sõnadega teisendatakse massiivi nimed osutiteks. See on põhjus, miks saate massiivide elementidele juurde pääsemiseks osutada. Peaksite siiski meeles pidama, et osutid ja massiivid ei ole samad .

On üksikuid juhtumeid, kus massiivinimed ei lagune osutitena. Lisateabe saamiseks külastage aadressi: Millal ei lagune massiivi nimi osuti?

Näide 2: massiivid ja osutid

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

Programmi käivitamisel on väljund järgmine:

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

Selles näites &x(2)määratakse kolmanda elemendi aadress ptr-osutile. Seega 3kuvati printimisel *ptr.

Ja trükkimine *(ptr+1)annab meile neljanda elemendi. Samamoodi *(ptr-1)annab trükkimine meile teise elemendi.

Huvitavad Artiklid...