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å int
er 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)
tilsvarerx+1
ogx(1)
tilsvarer*(x+1)
.&x(2)
tilsvarerx+2
ogx(2)
tilsvarer*(x+2)
.- …
- I utgangspunktet
&x(i)
tilsvarerx+i
ogx(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 3
ble 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.