I denne vejledning lærer du om forholdet mellem arrays og pegepinde i C-programmering. Du lærer også at få adgang til matrixelementer ved hjælp af pegepinde.
Før du lærer om forholdet mellem arrays og pegepinde, skal du kontrollere disse to emner:
- C Arrays
- C markører
Forholdet mellem arrays og pegepinde
En matrix er en blok med sekventielle data. Lad os skrive et program til at udskrive adresser på matrixelementer.
#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; )
Produktion
& x (0) = 1450734448 & x (1) = 1450734452 & x (2) = 1450734456 & x (3) = 1450734460 Adresse til array x: 1450734448
Der er en forskel på 4 byte mellem to på hinanden følgende elementer i array x. Det skyldes, at størrelsen på int
er 4 byte (på vores kompilator).
Bemærk, at adressen på & x (0) og x er den samme. Det skyldes, at variabelnavnet x peger på det første element i arrayet.
Fra ovenstående eksempel er det klart, at &x(0)
det svarer til x. Og x(0)
svarer til *x
.
Tilsvarende
&x(1)
svarer tilx+1
ogx(1)
svarer til*(x+1)
.&x(2)
svarer tilx+2
ogx(2)
svarer til*(x+2)
.- …
- Dybest set
&x(i)
svarer tilx+i
ogx(i)
svarer til*(x+i)
.
Eksempel 1: Markører og arrays
#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 kører programmet, vil output være:
Indtast 6 tal: 2 3 4 4 12 4 Sum = 29
Her har vi deklareret en matrix x med 6 elementer. For at få adgang til elementer i arrayet har vi brugt markører.
I de fleste sammenhænge henfalder arraynavne til pegepinde. I enkle ord konverteres matrixnavne til markører. Det er grunden til, at du kan bruge pegepinde til at få adgang til elementer i arrays. Du skal dog huske, at henvisninger og arrays ikke er de samme .
Der er et par tilfælde, hvor matrixnavne ikke henfald til henvisninger. Hvis du vil vide mere, skal du besøge: Hvornår henfalder arraynavnet ikke til en markør?
Eksempel 2: Arrays og pegepinde
#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 kører programmet, vil output være:
* ptr = 3 * (ptr + 1) = 4 * (ptr-1) = 2
I dette eksempel &x(2)
tildeles adressen til det tredje element til ptr-markøren. Derfor 3
blev vist, da vi udskrev *ptr
.
Og udskrivning *(ptr+1)
giver os det fjerde element. Tilsvarende *(ptr-1)
giver udskrivning os det andet element.