Relatie tussen arrays en pointers bij C-programmering (met voorbeelden)

In deze tutorial leer je over de relatie tussen arrays en pointers in C-programmering. Je leert ook toegang te krijgen tot array-elementen met behulp van pointers.

Voordat u meer te weten komt over de relatie tussen arrays en pointers, moet u deze twee onderwerpen controleren:

  • C Arrays
  • C Pointers

Relatie tussen arrays en pointers

Een array is een blok opeenvolgende gegevens. Laten we een programma schrijven om adressen van array-elementen af ​​te drukken.

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

Uitvoer

 & x (0) = 1450734448 & x (1) = 1450734452 & x (2) = 1450734456 & x (3) = 1450734460 Adres van array x: 1450734448 

Er is een verschil van 4 bytes tussen twee opeenvolgende elementen van array x. Het is omdat de grootte van int4 bytes is (op onze compiler).

Merk op dat het adres van & x (0) en x hetzelfde is. Dit komt doordat de variabelenaam x naar het eerste element van de array verwijst.

Uit het bovenstaande voorbeeld is het duidelijk dat &x(0)dit equivalent is aan x. En, x(0)is gelijk aan *x.

Evenzo

  • &x(1)is gelijk aan x+1en x(1)is gelijk aan *(x+1).
  • &x(2)is gelijk aan x+2en x(2)is gelijk aan *(x+2).
  • Kortom, &x(i)is gelijk aan x+ien x(i)is gelijk aan *(x+i).

Voorbeeld 1: Pointers en 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; ) 

Wanneer u het programma uitvoert, is de uitvoer:

 Voer 6 cijfers in: 2 3 4 4 12 4 Som = 29 

Hier hebben we een array x van 6 elementen gedeclareerd. Om toegang te krijgen tot elementen van de array, hebben we pointers gebruikt.

In de meeste contexten vervallen array-namen naar pointers. In eenvoudige bewoordingen worden array-namen geconverteerd naar pointers. Dat is de reden waarom u pointers kunt gebruiken om toegang te krijgen tot elementen van arrays. Onthoud echter dat pointers en arrays niet hetzelfde zijn .

Er zijn een paar gevallen waarin array-namen niet vervallen tot pointers. Ga voor meer informatie naar: Wanneer vervalt de arraynaam niet in een pointer?

Voorbeeld 2: Arrays en pointers

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

Wanneer u het programma uitvoert, is de uitvoer:

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

In dit voorbeeld wordt &x(2)het adres van het derde element toegewezen aan de ptr-pointer. Daarom 3werd getoond toen we drukten *ptr.

En afdrukken *(ptr+1)geeft ons het vierde element. Evenzo *(ptr-1)geeft afdrukken ons het tweede element.

Interessante artikelen...