Forholdet mellom matriser og pekere i C-programmering (med eksempler)

I denne opplæringen lærer du om forholdet mellom matriser og pekere i C-programmering. Du vil også lære å få tilgang til matriseelementer ved hjelp av pekere.

Før du lærer om forholdet mellom matriser og pekere, må du sjekke disse to emnene:

  • C Arrays
  • C Pekere

Forholdet mellom arrays og pekere

En matrise er en blokk med sekvensiell data. La oss skrive et program for å skrive ut adresser til matriseelementer.

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

Produksjon

 & x (0) = 1450734448 & x (1) = 1450734452 & x (2) = 1450734456 & x (3) = 1450734460 Adresse til array x: 1450734448 

Det er en forskjell på 4 byte mellom to påfølgende elementer i array x. Det er fordi størrelsen på inter 4 byte (på kompilatoren vår).

Legg merke til at adressen til & x (0) og x er den samme. Det er fordi variabelnavnet x peker på det første elementet i matrisen.

Fra eksemplet ovenfor er det tydelig at &x(0)det tilsvarer x. Og x(0)tilsvarer *x.

På samme måte,

  • &x(1)tilsvarer x+1og x(1)tilsvarer *(x+1).
  • &x(2)tilsvarer x+2og x(2)tilsvarer *(x+2).
  • I utgangspunktet &x(i)tilsvarer x+iog x(i)tilsvarer *(x+i).

Eksempel 1: Pekere og matriser

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

Når du kjører programmet, vil utdataene være:

 Skriv inn 6 tall: 2 3 4 4 12 4 Sum = 29 

Her har vi erklært en matrise x med 6 elementer. For å få tilgang til elementer i matrisen har vi brukt pekere.

I de fleste sammenhenger forfaller matrisenavn til pekere. Med enkle ord konverteres matrisenavn til pekere. Det er grunnen til at du kan bruke pekere for å få tilgang til elementer i matriser. Du bør imidlertid huske at pekere og matriser ikke er de samme .

Det er noen få tilfeller der matrisenavn ikke forfaller til pekere. Hvis du vil vite mer, kan du gå til: Når forfaller ikke matrisenavnet til en peker?

Eksempel 2: Arrays og pekere

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

Når du kjører programmet, vil utdataene være:

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

I dette eksemplet &x(2)er adressen til det tredje elementet tilordnet ptr-pekeren. Derfor 3ble vist når vi skrev ut *ptr.

Og utskrift *(ptr+1)gir oss det fjerde elementet. På samme måte *(ptr-1)gir utskrift oss det andre elementet.

Interessante artikler...