C ++ rādītāji un masīvi

Šajā apmācībā mēs uzzināsim par masīvu un rādītāju saistību ar piemēru palīdzību.

Programmā C ++ rādītāji ir mainīgie, kas satur citu mainīgo adreses. Rādītājs var ne tikai saglabāt viena mainīgā adresi, bet arī masīva šūnu adresi.

Apsveriet šo piemēru:

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

Šeit ptr ir rādītāja mainīgais, bet arr ir intmasīvs. Kods ptr = arr;saglabā masīva pirmā elementa adresi mainīgajā ptr.

Ievērojiet, ka mēs izmantojām arrvietā &arr(0). Tas ir tāpēc, ka abi ir vienādi. Tātad kods zemāk ir tāds pats kā iepriekš.

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

Par pārējiem masīva elementu adreses doti &arr(1), &arr(2), &arr(3), un &arr(4).

Norādiet uz katru masīva elementu

Pieņemsim, ka mums ir jānorāda uz masīva ceturto elementu, izmantojot to pašu rādītāju ptr.

Ja ptr norāda uz pirmo elementu iepriekš minētajā piemērā, ptr + 3tas norādīs uz ceturto elementu. Piemēram,

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

Līdzīgi mēs varam piekļūt elementiem, izmantojot vienu rādītāju. Piemēram,

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

Pieņemsim, ja mēs esam inicializēts ptr = &arr(2);tad

 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);
C ++ rādītāju apstrāde ar masīviem

Piezīme . Adrese starp ptr un ptr + 1 atšķiras ar 4 baitiem. Tas ir tāpēc, ka ptr ir rādītājs intdatiem. Int lielums ir 4 baiti 64 bitu operētājsistēmā.

Līdzīgi, ja rādītājs ptr norāda uz chartipa datiem, adrese starp ptr un ptr + 1 ir 1 baits. Tas ir tāpēc, ka rakstzīmes lielums ir 1 baits.

1. piemērs: C ++ rādītāji un masīvi

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

Rezultāts

 Adreses parādīšana, izmantojot masīvus: & arr (0) = 0x61fef0 & arr (1) = 0x61fef4 & arr (2) = 0x61fef8 Adreses parādīšana, izmantojot rādītājus: ptr + 0 = 0x61fef0 ptr + 1 = 0x61fef4 ptr + 2 = 0x61fef8

Iepriekš minētajā programmā vispirms mēs vienkārši izdrukājām masīva elementu adreses, neizmantojot rādītāja mainīgo ptr.

Tad mēs izmantojām rādītāju ptr, lai norādītu uz a (0) ptr + 1adresi, uz a (1) adresi utt.

Vairumā gadījumu masīvu nosaukumi sadalās līdz rādītājiem. Vienkāršos vārdos masīvu nosaukumi tiek pārveidoti par rādītājiem. Tāpēc mēs varam izmantot rādītājus, lai piekļūtu masīvu elementiem.

Tomēr mums vajadzētu atcerēties, ka rādītāji un masīvi nav vienādi.

Ir daži gadījumi, kad masīvu nosaukumi nesadalās līdz rādītājiem. Lai uzzinātu vairāk, apmeklējiet vietni: Kad masīva nosaukums nesadalās rādītājā?

2. piemērs: masīva nosaukums, ko izmanto kā rādītāju

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

Rezultāts

 Ievadiet 5 skaitļus: 2,5 3,5 4,5 5 2

Šeit,

  1. Vispirms mēs izmantojām rādītāja apzīmējumu, lai saglabātu lietotāja ievadītos numurus masīva masīvā.

     cin>> *(arr + i) ;

    Šis kods ir ekvivalents šādam kodam:

     cin>> arr(i);

    Ievērojiet, ka mēs neesam deklarējuši atsevišķu rādītāja mainīgo, bet rādītāja apzīmējumam mēs izmantojam masīva nosaukumu arr.

    Kā mēs jau zinām, masīva nosaukums arr norāda uz masīva pirmo elementu. Tātad, mēs varam domāt, ka arr darbojas kā rādītājs.

  2. Līdzīgi mēs pēc tam izmantojām forciklu, lai parādītu arr vērtības, izmantojot rādītāju apzīmējumus.

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

    Šis kods ir ekvivalents

     cout << arr(i) << endl ;

Interesanti raksti...