C ++ žymekliai ir masyvai

Šioje pamokoje pavyzdžių pagalba sužinosime apie masyvų ir žymeklių santykį.

C ++ versijoje rodyklės yra kintamieji, kuriuose laikomi kitų kintamųjų adresai. Žymeklis gali ne tik išsaugoti vieno kintamojo adresą, bet ir masyvo ląstelių adresą.

Apsvarstykite šį pavyzdį:

 int *ptr; int arr(5); // store the address of the first // element of arr in ptr ptr = arr;

Čia ptr yra rodiklio kintamasis, o arr yra intmasyvas. Kodas ptr = arr;saugo pirmo masyvo elemento adresą kintamajame ptr.

Atkreipkite dėmesį, kad mes naudojome arrvietoj &arr(0). Taip yra todėl, kad abu yra vienodi. Taigi, žemiau pateiktas kodas yra tas pats, kas aukščiau.

 int *ptr; int arr(5); ptr = &arr(0);

Už masyvo elementais poilsio adresai pateiktas &arr(1), &arr(2), &arr(3), ir &arr(4).

Užveskite pelės žymeklį į kiekvieną masyvo elementą

Tarkime, kad mes turime nurodyti ketvirtąjį masyvo elementą naudodami tą patį rodyklę ptr.

Čia, jei ptr nurodo pirmąjį elementą aukščiau pateiktame pavyzdyje, tai ptr + 3nurodys ketvirtąjį elementą. Pavyzdžiui,

 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);

Panašiai galime pasiekti elementus naudodami vieną rodyklę. Pavyzdžiui,

 // 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);

Tarkime, jei ptr = &arr(2);tada inicijavome

 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);
C ++ rodyklių su masyvais darbas

Pastaba: adresas tarp ptr ir ptr + 1 skiriasi 4 baitais. Taip yra todėl, kad ptr yra duomenų rodyklė int. „Int“ dydis yra 4 baitai 64 bitų operacinėje sistemoje.

Panašiai, jei žymeklis ptr nurodo chartipo duomenis, tada adresas tarp ptr ir ptr + 1 yra 1 baitas. Taip yra todėl, kad simbolio dydis yra 1 baitas.

1 pavyzdys: C ++ žymekliai ir masyvai

 // 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; )

Rezultatas

 Adreso rodymas naudojant masyvus: & arr (0) = 0x61fef0 & arr (1) = 0x61fef4 & arr (2) = 0x61fef8 Adreso rodymas naudojant rodykles: ptr + 0 = 0x61fef0 ptr + 1 = 0x61fef4 ptr + 2 = 0x61fef8

Pirmiau pateiktoje programoje pirmiausia paprasčiausiai išspausdinome masyvo elementų adresus, nenaudodami rodyklės kintamojo ptr.

Tada mes naudojome žymeklį ptr, norėdami nukreipti į (0) ptr + 1adresą, į (1) adresą ir pan.

Daugumoje atvejų masyvų pavadinimai suyra į rodykles. Paprastais žodžiais, masyvo pavadinimai paverčiami rodyklėmis. Štai kodėl mes galime naudoti rodykles, kad pasiektume masyvo elementus.

Tačiau turėtume prisiminti, kad žymekliai ir masyvai nėra vienodi.

Yra keletas atvejų, kai masyvo pavadinimai neskaidomi į rodykles. Norėdami sužinoti daugiau, apsilankykite: Kada masyvo pavadinimas nesuyra į rodyklę?

2 pavyzdys: masyvo pavadinimas naudojamas kaip žymeklis

 // 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; )

Rezultatas

 Įveskite 5 skaičius: 2,5 3,5 4,5 5 2 2 Rodomi duomenys: 2,5 3,5 4,5 5 2

Čia

  1. Pirmiausia naudojome žymeklio žymėjimą, kad išsaugotume vartotojo įvestus numerius į masyvo masyvą.

     cin>> *(arr + i) ;

    Šis kodas atitinka žemiau pateiktą kodą:

     cin>> arr(i);

    Atkreipkite dėmesį, kad mes nedeklaravome atskiro žymeklio kintamojo, bet žymiklio žymėjimui naudojame masyvo pavadinimą arr.

    Kaip mes jau žinome, masyvo pavadinimas arr rodo pirmąjį masyvo elementą. Taigi, mes galime galvoti apie arr kaip apie rodyklę.

  2. Panašiai tada mes naudojome forkilpą rodydami arr reikšmes naudodami žymeklio žymėjimą.

     cout << *(arr + i) << endl ;

    Šis kodas yra lygiavertis

     cout << arr(i) << endl ;

Įdomios straipsniai...