In deze tutorial leren we met behulp van voorbeelden over de relatie tussen arrays en pointers.
In C ++ zijn pointers variabelen die adressen van andere variabelen bevatten. Een pointer kan niet alleen het adres van een enkele variabele opslaan, hij kan ook het adres van cellen van een array opslaan.
Beschouw dit voorbeeld eens:
int *ptr; int arr(5); // store the address of the first // element of arr in ptr ptr = arr;
Hier is ptr een pointervariabele terwijl arr een int
array is. De code ptr = arr;
slaat het adres van het eerste element van de array op in variabele ptr.
Merk op dat we hebben gebruikt in arr
plaats van &arr(0)
. Dit komt omdat beide hetzelfde zijn. De onderstaande code is dus dezelfde als de bovenstaande code.
int *ptr; int arr(5); ptr = &arr(0);
De adressen voor de rest van de arrayelementen worden gegeven &arr(1)
, &arr(2)
, &arr(3)
en &arr(4)
.
Wijs naar elk array-element
Stel dat we met dezelfde pointer ptr naar het vierde element van de array moeten wijzen.
Hier, als ptr naar het eerste element in het bovenstaande voorbeeld verwijst, ptr + 3
zal het naar het vierde element verwijzen. Bijvoorbeeld,
int *ptr; int arr(5); ptr = arr; ptr + 1 is equivalent to &arr(1); ptr + 2 is equivalent to &arr(2); ptr + 3 is equivalent to &arr(3); ptr + 4 is equivalent to &arr(4);
Evenzo hebben we toegang tot de elementen met behulp van de enkele aanwijzer. Bijvoorbeeld,
// use dereference operator *ptr == arr(0); *(ptr + 1) is equivalent to arr(1); *(ptr + 2) is equivalent to arr(2); *(ptr + 3) is equivalent to arr(3); *(ptr + 4) is equivalent to arr(4);
Stel dat als we hebben geïnitialiseerd ptr = &arr(2);
dan
ptr - 2 is equivalent to &arr(0); ptr - 1 is equivalent to &arr(1); ptr + 1 is equivalent to &arr(3); ptr + 2 is equivalent to &arr(4);
![](https://cdn.wiki-base.com/5329031/c_pointers_and_arrays.png.webp)
Opmerking: het adres tussen ptr en ptr + 1 verschilt 4 bytes. Het is omdat ptr een verwijzing naar een int
gegevens is. En de grootte van int is 4 bytes in een 64-bits besturingssysteem.
Evenzo, als pointer ptr verwijst naar char
type data, dan is het adres tussen ptr en ptr + 1 1 byte. Dit komt doordat de grootte van een teken 1 byte is.
Voorbeeld 1: C ++ Pointers en Arrays
// C++ Program to display address of each element of an array #include using namespace std; int main() ( float arr(3); // declare pointer variable float *ptr; cout << "Displaying address using arrays: " << endl; // use for loop to print addresses of all array elements for (int i = 0; i < 3; ++i) ( cout << "&arr(" << i << ") = " << &arr(i) << endl; ) // ptr = &arr(0) ptr = arr; cout<<"Displaying address using pointers: "<< endl; // use for loop to print addresses of all array elements // using pointer notation for (int i = 0; i < 3; ++i) ( cout << "ptr + " << i << " = "<< ptr + i << endl; ) return 0; )
Uitvoer
Adres weergeven met behulp van arrays: & arr (0) = 0x61fef0 & arr (1) = 0x61fef4 & arr (2) = 0x61fef8 Adres weergeven met aanwijzers: ptr + 0 = 0x61fef0 ptr + 1 = 0x61fef4 ptr + 2 = 0x61fef8
In het bovenstaande programma hebben we eerst gewoon de adressen van de array-elementen afgedrukt zonder de pointervariabele ptr te gebruiken.
Vervolgens gebruikten we de pointer ptr om naar het adres van a (0) ptr + 1
te wijzen , om naar het adres van a (1) te wijzen, enzovoort.
In de meeste contexten vervallen array-namen naar pointers. In eenvoudige bewoordingen worden array-namen geconverteerd naar pointers. Dat is de reden waarom we pointers kunnen gebruiken om toegang te krijgen tot elementen van arrays.
We moeten echter niet vergeten 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: Array-naam gebruikt als pointer
// C++ Program to insert and display data entered by using pointer notation. #include using namespace std; int main() ( float arr(5); // Insert data using pointer notation cout << "Enter 5 numbers: "; for (int i = 0; i > *(arr + i) ; ) // Display data using pointer notation cout << "Displaying data: " << endl; for (int i = 0; i < 5; ++i) ( // display value of arr(i) cout << *(arr + i) << endl ; ) return 0; )
Uitvoer
Voer 5 cijfers in: 2,5 3,5 4,5 5 2 Gegevens weergeven: 2,5 3,5 4,5 5 2
Hier,
-
We hebben eerst de pointer-notatie gebruikt om de nummers die door de gebruiker zijn ingevoerd op te slaan in de array arr.
cin>> *(arr + i) ;
Deze code is gelijk aan de onderstaande code:
cin>> arr(i);
Merk op dat we geen aparte pointervariabele hebben gedeclareerd, maar dat we eerder de arraynaam arr gebruiken voor de pointer-notatie.
Zoals we al weten, verwijst de arraynaam arr naar het eerste element van de array. Dus we kunnen arr zien als een aanwijzer.
-
Evenzo hebben we vervolgens
for
loop gebruikt om de waarden van arr weer te geven met behulp van pointer-notatie.cout << *(arr + i) << endl ;
Deze code is gelijk aan
cout << arr(i) << endl ;