Š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 int
masīvs. Kods ptr = arr;
saglabā masīva pirmā elementa adresi mainīgajā ptr.
Ievērojiet, ka mēs izmantojām arr
vietā &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 + 3
tas 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);

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 int
datiem. Int lielums ir 4 baiti 64 bitu operētājsistēmā.
Līdzīgi, ja rādītājs ptr norāda uz char
tipa 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 + 1
adresi, 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,
-
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.
-
Līdzīgi mēs pēc tam izmantojām
for
ciklu, 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 ;