Forholdet mellem arrays og pegepinde i C-programmering (med eksempler)

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å inter 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 til x+1og x(1)svarer til *(x+1).
  • &x(2)svarer til x+2og x(2)svarer til *(x+2).
  • Dybest set &x(i)svarer til x+iog x(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 3blev vist, da vi udskrev *ptr.

Og udskrivning *(ptr+1)giver os det fjerde element. Tilsvarende *(ptr-1)giver udskrivning os det andet element.

Interessante artikler...