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 int
4 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 aanx+1
enx(1)
is gelijk aan*(x+1)
.&x(2)
is gelijk aanx+2
enx(2)
is gelijk aan*(x+2)
.- …
- Kortom,
&x(i)
is gelijk aanx+i
enx(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 3
werd getoond toen we drukten *ptr
.
En afdrukken *(ptr+1)
geeft ons het vierde element. Evenzo *(ptr-1)
geeft afdrukken ons het tweede element.