C ++ Pointers en arrays

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 intarray 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 arrplaats 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 + 3zal 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);
Werken met C ++ Pointers met arrays

Opmerking: het adres tussen ptr en ptr + 1 verschilt 4 bytes. Het is omdat ptr een verwijzing naar een intgegevens is. En de grootte van int is 4 bytes in een 64-bits besturingssysteem.

Evenzo, als pointer ptr verwijst naar chartype 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 + 1te 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,

  1. 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.

  2. Evenzo hebben we vervolgens forloop 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 ;

Interessante artikelen...