C ++ pekare och matriser

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 intmatris. 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 arristä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 + 3kommer 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);
Arbeta med C ++ - pekare med matriser

Obs! Adressen mellan ptr och ptr + 1 skiljer sig med 4 byte. Det beror på att ptr är en pekare till en intdata. Och storleken på int är 4 byte i ett 64-bitars operativsystem.

På samma sätt, om pekaren ptr pekar på att charskriva 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 + 1att 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,

  1. 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.

  2. På samma sätt använde vi sedan forloop 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 ;

Intressanta artiklar...