C ++ markører og arrays

I denne vejledning lærer vi om forholdet mellem arrays og pegepinde ved hjælp af eksempler.

I C ++ er markører variabler, der indeholder adresser til andre variabler. Ikke kun kan en markør gemme adressen på en enkelt variabel, den kan også gemme adressen på celler i en matrix.

Overvej dette eksempel:

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

Her er ptr en markørvariabel, mens arr er en intmatrix. Koden ptr = arr;gemmer adressen på det første element i arrayet i variabel ptr.

Bemærk, at vi har brugt i arrstedet for &arr(0). Dette er fordi begge er ens. Så koden nedenfor er den samme som koden ovenfor.

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

Adresserne for resten af array-elementerne er givet ved &arr(1), &arr(2), &arr(3), og &arr(4).

Peg på alle matrixelementer

Antag, at vi skal pege på det fjerde element i arrayet ved hjælp af den samme markør ptr.

Her, hvis ptr peger på det første element i ovenstående eksempel, så ptr + 3peger det på det fjerde element. For eksempel,

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

På samme måde kan vi få adgang til elementerne ved hjælp af den enkelte markør. For eksempel,

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

Antag, at hvis vi har initialiseret ptr = &arr(2);det

 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);
Arbejde med C ++ - markører med arrays

Bemærk: Adressen mellem ptr og ptr + 1 adskiller sig med 4 byte. Det er fordi ptr er en markør til intdata. Og størrelsen på int er 4 bytes i et 64-bit operativsystem.

Tilsvarende, hvis markøren ptr peger på at charskrive data, er adressen mellem ptr og ptr + 1 1 byte. Det er fordi størrelsen på et tegn er 1 byte.

Eksempel 1: C ++ markører og 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; )

Produktion

 Visning af adresse ved hjælp af arrays: & arr (0) = 0x61fef0 & arr (1) = 0x61fef4 & arr (2) = 0x61fef8 Visning af adresse ved hjælp af pekere: ptr + 0 = 0x61fef0 ptr + 1 = 0x61fef4 ptr + 2 = 0x61fef8

I ovenstående program udskrev vi først blot adresserne på matrixelementerne uden at bruge markørvariablen ptr.

Derefter brugte vi markøren ptr til at pege på adressen på a (0), ptr + 1til at pege på adressen på a (1) osv.

I de fleste sammenhænge henfalder arraynavne til pegepinde. I enkle ord konverteres matrixnavne til markører. Det er grunden til, at vi kan bruge pegepinde til at få adgang til elementer i arrays.

Vi skal dog huske, at henvisninger og arrays ikke er de samme.

Der er et par tilfælde, hvor matrixnavne ikke henfald til henvisninger. Hvis du vil vide mere, skal du besøge: Hvornår henfalder arraynavnet ikke til en markør?

Eksempel 2: Arraynavn brugt som markør

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

Produktion

 Indtast 5 tal: 2,5 3,5 4,5 5 2 Visning af data: 2,5 3,5 4,5 5 2

Her,

  1. Vi brugte først markørenotation til at gemme de numre, som brugeren indtastede, i array arr.

     cin>> *(arr + i) ;

    Denne kode svarer til nedenstående kode:

     cin>> arr(i);

    Bemærk, at vi ikke har deklareret en separat markørvariabel, men snarere bruger vi arraynavnet arr til markørenotation.

    Som vi allerede ved, peger arraynavnet arr på det første element i arrayet. Så vi kan tænke på arr som at fungere som en markør.

  2. På samme måde brugte vi derefter forloop til at vise værdierne for arr ved hjælp af markørnotation.

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

    Denne kode svarer til

     cout << arr(i) << endl ;

Interessante artikler...