I denna handledning lär vi oss om förhållandet mellan matriser och pekare med hjälp av exempel.
I C ++ är pekare variabler som innehåller adresser till andra variabler. Inte bara kan en pekare lagra adressen till en enda variabel, den kan också lagra adressen till celler i en matris.
Tänk på detta exempel:
int *ptr; int arr(5); // store the address of the first // element of arr in ptr ptr = arr;
Här är ptr en pekervariabel medan arr är en int
matris. Koden ptr = arr;
lagrar adressen till det första elementet i matrisen i variabel ptr.
Lägg märke till att vi har använt arr
istället för &arr(0)
. Detta beror på att båda är desamma. Så koden nedan är densamma som koden ovan.
int *ptr; int arr(5); ptr = &arr(0);
Adresserna för resten av gruppelementen ges av &arr(1)
, &arr(2)
, &arr(3)
, och &arr(4)
.
Peka på varje matriselement
Antag att vi måste peka på det fjärde elementet i matrisen med samma pekare ptr.
Här, om ptr pekar på det första elementet i exemplet ovan ptr + 3
kommer det att peka på det fjärde elementet. Till exempel,
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å samma sätt kan vi komma åt elementen med hjälp av den enda pekaren. Till exempel,
// 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 att om vi har initierats ptr = &arr(2);
sedan
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);

Obs! Adressen mellan ptr och ptr + 1 skiljer sig med 4 byte. Det beror på att ptr är en pekare till en int
data. Och storleken på int är 4 byte i ett 64-bitars operativsystem.
På samma sätt, om pekaren ptr pekar på att char
skriva data, är adressen mellan ptr och ptr + 1 1 byte. Det beror på att karaktärens storlek är 1 byte.
Exempel 1: C ++ pekare och 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; )
Produktion
Visar adress med matriser: & arr (0) = 0x61fef0 & arr (1) = 0x61fef4 & arr (2) = 0x61fef8 Visar adress med pekare: ptr + 0 = 0x61fef0 ptr + 1 = 0x61fef4 ptr + 2 = 0x61fef8
I ovanstående program skrev vi först ut adresserna till arrayelementen utan att använda pekervariabeln ptr.
Sedan använde vi pekaren ptr för att peka på adressen till a (0), för ptr + 1
att peka på adressen till a (1) och så vidare.
I de flesta sammanhang förfaller arraynamn till pekare. I enkla ord konverteras arraynamn till pekare. Det är anledningen till att vi kan använda pekare för att komma åt element i matriser.
Vi bör dock komma ihåg att pekare och matriser inte är desamma.
Det finns några fall där arraynamn inte förfaller till pekare. För att lära dig mer, besök: När förfaller inte arraynamn till en pekare?
Exempel 2: Arraynamn används som pekare
// 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
Ange 5 siffror: 2,5 3,5 4,5 5 2 Visar data: 2,5 3,5 4,5 5 2
Här,
-
Vi använde först pekaren för att lagra de siffror som användaren angav i arrayarr.
cin>> *(arr + i) ;
Den här koden motsvarar koden nedan:
cin>> arr(i);
Observera att vi inte har förklarat en separat pekervariabel, utan snarare använder vi arraynamn arr för pekaren.
Som vi redan vet pekar arraynamnet arr på det första elementet i arrayen. Så vi kan tänka oss att arr fungerar som en pekare.
-
På samma sätt använde vi sedan
for
loop för att visa värdena för arr med hjälp av pekarenotation.cout << *(arr + i) << endl ;
Den här koden motsvarar
cout << arr(i) << endl ;