C ++ pekere og matriser

I denne veiledningen vil vi lære om forholdet mellom matriser og pekere ved hjelp av eksempler.

I C ++ er pekere variabler som inneholder adresser til andre variabler. Ikke bare kan en peker lagre adressen til en enkelt variabel, den kan også lagre adressen til celler i en matrise.

Tenk på dette eksemplet:

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

Her er ptr en pekervariabel mens arr er en intmatrise. Koden ptr = arr;lagrer adressen til det første elementet i matrisen i variabel ptr.

Legg merke til at vi har brukt i arrstedet for &arr(0). Dette er fordi begge er like. Så koden nedenfor er den samme som koden ovenfor.

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

Adressene til resten av oppstillingselementene er gitt ved &arr(1), &arr(2), &arr(3), og &arr(4).

Pek på alle elementene

Anta at vi må peke på det fjerde elementet i matrisen ved hjelp av samme peker ptr.

Her, hvis ptr peker på det første elementet i eksemplet ovenfor, ptr + 3vil det peke på det fjerde elementet. 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åte kan vi få tilgang til elementene ved hjelp av enkeltpekeren. 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);

Anta at hvis vi har initialisert 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);
Arbeid med C ++ pekere med arrays

Merk: Adressen mellom ptr og ptr + 1 varierer med 4 byte. Det er fordi ptr er en peker til intdata. Og størrelsen på int er 4 byte i et 64-biters operativsystem.

På samme måte, hvis pekeren ptr peker på å charskrive data, er adressen mellom ptr og ptr + 1 1 byte. Det er fordi størrelsen på et tegn er 1 byte.

Eksempel 1: C ++ pekere og matriser

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

Produksjon

 Viser adresse ved hjelp av matriser: & arr (0) = 0x61fef0 & arr (1) = 0x61fef4 & arr (2) = 0x61fef8 Viser adresse ved hjelp av pekere: ptr + 0 = 0x61fef0 ptr + 1 = 0x61fef4 ptr + 2 = 0x61fef8

I programmet ovenfor skrev vi bare ut adressene til matriseelementene uten å bruke pekervariabelen ptr.

Deretter brukte vi pekeren ptr for å peke på adressen til a (0), for ptr + 1å peke på adressen til a (1), og så videre.

I de fleste sammenhenger forfaller matrisenavn til pekere. Med enkle ord konverteres matrisenavn til pekere. Det er grunnen til at vi kan bruke pekere til å få tilgang til elementer i matriser.

Vi bør imidlertid huske at pekere og matriser ikke er de samme.

Det er noen få tilfeller der matrisenavn ikke forfaller til pekere. Hvis du vil vite mer, kan du gå til: Når forfaller ikke matrisenavnet til en peker?

Eksempel 2: Arraynavn brukt som peker

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

Produksjon

 Tast inn 5 tall: 2,5 3,5 4,5 5 2 Viser data: 2,5 3,5 4,5 5 2

Her,

  1. Vi brukte først pekeren for å lagre tallene som ble angitt av brukeren i matrisen arr.

     cin>> *(arr + i) ;

    Denne koden tilsvarer koden nedenfor:

     cin>> arr(i);

    Legg merke til at vi ikke har deklarert en egen pekervariabel, men vi bruker heller matrisenavnet arr for pekernotasjonen.

    Som vi allerede vet, peker matrisenavnet arr på det første elementet i matrisen. Så vi kan tenke på arr som å fungere som en pekepinn.

  2. På samme måte brukte vi deretter forloop for å vise verdiene til arr ved hjelp av pekernotasjon.

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

    Denne koden tilsvarer

     cout << arr(i) << endl ;

Interessante artikler...