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 int
matrix. Koden ptr = arr;
gemmer adressen på det første element i arrayet i variabel ptr.
Bemærk, at vi har brugt i arr
stedet 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 + 3
peger 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 int
data. Og størrelsen på int er 4 bytes i et 64-bit operativsystem.
Tilsvarende, hvis markøren ptr peger på at char
skrive 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 + 1
til 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,
-
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.
-
På samme måde brugte vi derefter
for
loop 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 ;