Relatie tussen arrays en pointers
Relatie tussen arrays en pointers
In deze zelfstudie leert u 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-matrices
- C-aanwijzers
Relatie tussen arrays en pointers
Een array is een blok sequentiële gegevens. Laten we een programma schrijven om adressen van array-elementen af te drukken.
#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("Address of array x: %p", x);
return 0;
}
Uitvoer
&x[0] = 1450734448 &x[1] = 1450734452 &x[2] = 1450734456 &x[3] = 1450734460 Address of array x: 1450734448
Er is een verschil van 4 bytes tussen twee opeenvolgende elementen van array x . Het is omdat de grootte van int
is 4 bytes (op onze compiler).
Merk op dat het adres van &x[0] en x is hetzelfde. Het is omdat de variabelenaam x wijst naar het eerste element van de array.
Uit het bovenstaande voorbeeld is het duidelijk dat &x[0]
is gelijk 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 <stdio.h>
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:
Enter 6 numbers: 2 3 4 4 12 4 Sum = 29
Hier hebben we een array gedeclareerd x van 6 elementen. Om toegang te krijgen tot elementen van de array, hebben we pointers gebruikt.
In de meeste contexten vervallen arraynamen tot pointers. In eenvoudige bewoordingen worden arraynamen omgezet in 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 arraynamen niet vervallen tot pointers. Ga voor meer informatie naar:Wanneer vervalt de arraynaam niet in een aanwijzer?
Voorbeeld 2:arrays en pointers
#include <stdio.h>
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 \n", *ptr); // 3
printf("*(ptr+1) = %d \n", *(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 &x[2]
, het adres van het derde element, wordt toegewezen aan de ptr wijzer. Vandaar, 3
werd weergegeven toen we *ptr
. afdrukten .
En, afdrukken *(ptr+1)
geeft ons het vierde element. Op dezelfde manier printen *(ptr-1)
geeft ons het tweede element.
C Taal
- Wat is de relatie tussen big data en cloud computing?
- C++-aanwijzers en arrays
- C Pass-adressen en -wijzers
- C-structuren en aanwijzers
- De relatie tussen spanning en stroom in elektromotoren
- De relatie tussen bewerking en onderhoud verbeteren
- De relatie tussen IoT en edge computing
- Verschillen tussen SCADA en HMI
- Het verschil tussen gelijkstroom- en wisselstroommotoren
- Verschil tussen solderen en solderen
- Verschil tussen 2-takt en 4-takt motoren