De relatie tussen arrays en pointers in C begrijpen
Relatie tussen arrays en pointers
In deze tutorial leer je over de relatie tussen arrays en pointers in C-programmeren. Je leert ook array-elementen benaderen met pointers.
Voordat je leert over de relatie tussen arrays en pointers, zorg dat je deze twee onderwerpen kent:
- C Arrays
- C Pointers
Relatie tussen arrays en pointers
Een array is een blok van opeenvolgende data. Laten we een programma schrijven dat adressen van array-elementen print.
#include <stdio.h>
int main() {
int x[4];
int i;
for(i = 0; i < 4; ++i) {
printf("&x[%d] = %p\n", i, &x[i]);
}
printf("Adres van array x: %p", x);
return 0;
}
Output
&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. Dit is omdat de grootte van int 4 bytes is (op onze compiler).
Let op dat het adres van &x[0] en x hetzelfde is. Het is omdat de variabelenaam x wijst naar het eerste element van de array.

Uit het bovenstaande voorbeeld is duidelijk dat &x[0] equivalent is aan x. En x[0] is equivalent aan *x.
Op dezelfde manier:
&x[1]is equivalent aanx+1enx[1]is equivalent aan*(x+1).&x[2]is equivalent aanx+2enx[2]is equivalent aan*(x+2).- ...
- In het algemeen:
&x[i]is equivalent aanx+ienx[i]is equivalent aan*(x+i).
Voorbeeld 1: Pointers en arrays
#include <stdio.h>
int main() {
int i, x[6], sum = 0;
printf("Voer 6 getallen in: ");
for(i = 0; i < 6; ++i) {
// Equivalent aan scanf("%d", &x[i]);
scanf("%d", x+i);
// Equivalent aan sum += x[i]
sum += *(x+i);
}
printf("Som = %d", sum);
return 0;
}
Wanneer je het programma runt, is de output:
Voer 6 getallen 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 arraynamen naar pointers. In simpele woorden: arraynamen worden geconverteerd naar pointers. Dat is de reden waarom je pointers kunt gebruiken om toegang te krijgen tot elementen van arrays. Je moet echter onthouden dat pointers en arrays niet hetzelfde zijn.
Er zijn een paar gevallen waar arraynamen niet vervallen naar pointers. Lees meer: Wanneer vervalt een arraynaam niet naar een pointer?
Voorbeeld 2: Arrays en pointers
#include <stdio.h>
int main() {
int x[5] = {1, 2, 3, 4, 5};
int* ptr;
// ptr krijgt het adres van het derde element
ptr = &x[2];
printf("*ptr = %d \n", *ptr); // 3
printf("*(ptr+1) = %d \n", *(ptr+1)); // 4
printf("*(ptr-1) = %d", *(ptr-1)); // 2
return 0;
}
Wanneer je het programma runt, is de output:
*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 werd 3 getoond toen we *ptr printten.
En het printen van *(ptr+1) geeft ons het vierde element. Op dezelfde manier geeft het printen van *(ptr-1) ons het tweede element.
C Taal
- Spanning-stroom onbalans in elektrische motoren begrijpen: oorzaken en troubleshooting
- Operaties-Onderhoud Collaboratie Verbeteren voor Superieure Productieresultaten
- Hardlossen vs. Solderen: Belangrijkste Verschillen Uitgelegd
- 2-Takt vs 4-Takt Motoren: Belangrijkste Verschillen Uitgelegd
- SCADA vs. HMI: Belangrijke verschillen en hun rol in Industrie 4.0
- DC vs AC Motoren Begrijpen: Belangrijkste Verschillen en Kookgids
- Big Data en Cloud Computing: Hoe Ze Samenwerken
- Hoe IoT en Edge Computing Elkaar Aanvullen
- C++ Pointers en Arrays: De relatie meesteren
- C-programmeren: Adressen & pointers doorgeven aan functies – Een praktische gids
- C Structs en Pointers onder de knie krijgen: Een praktische gids