C ++ pokazivači i nizovi

U ovom ćemo tutorijalu uz primjere naučiti o odnosu između nizova i pokazivača.

U jeziku C ++ pokazivači su varijable koje sadrže adrese drugih varijabli. Pokazivač ne samo da može pohraniti adresu pojedine varijable, već može pohraniti i adresu ćelija niza.

Razmotrite ovaj primjer:

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

Ovdje je ptr varijabla pokazivača, dok je arr intniz. Kôd ptr = arr;pohranjuje adresu prvog elementa niza u varijablu ptr.

Primijetite da smo koristili arrumjesto &arr(0). To je zato što su oba ista. Dakle, kod ispod je isti kao i kod gore.

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

Adrese za ostale elemente matrice su dali &arr(1), &arr(2), &arr(3), i &arr(4).

Pokažite na sve elemente niza

Pretpostavimo da trebamo ukazati na četvrti element niza koristeći isti pokazivač ptr.

Ovdje, ako ptr upućuje na prvi element u gornjem primjeru, tada ptr + 3će ukazivati ​​na četvrti element. Na primjer,

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

Slično tome, elementima možemo pristupiti pomoću jednog pokazivača. Na primjer,

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

Pretpostavimo ako smo ptr = &arr(2);tada inicijalizirali

 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);
Rad pokazivača C ++ s nizovima

Napomena: Adresa između ptr i ptr + 1 razlikuje se za 4 bajta. To je zato što je ptr pokazivač na intpodatke. I, veličina int je 4 bajta u 64-bitnom operativnom sustavu.

Slično tome, ako pokazivač ptr usmjerava na charpodatke tipa, tada je adresa između ptr i ptr + 1 1 bajt. To je zato što je veličina znaka 1 bajt.

Primjer 1: C ++ pokazivači i nizovi

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

Izlaz

 Prikaz adrese pomoću polja: & arr (0) = 0x61fef0 & arr (1) = 0x61fef4 & arr (2) = 0x61fef8 Prikazivanje adrese pomoću pokazivača: ptr + 0 = 0x61fef0 ptr + 1 = 0x61fef4 ptr + 2 = 0x61fef8

U gornjem programu prvo smo jednostavno ispisali adrese elemenata niza bez korištenja pokazivačke varijable ptr.

Zatim smo pomoću pokazivača ptr usmjerili na adresu a (0), ptr + 1usmjerili na adresu a (1) i tako dalje.

U većini konteksta, imena polja raspadaju se do pokazivača. Jednostavnim riječima, nazivi polja pretvaraju se u pokazivače. To je razlog zašto možemo koristiti pokazivače za pristup elementima nizova.

Međutim, trebali bismo imati na umu da pokazivači i nizovi nisu isto.

Postoji nekoliko slučajeva kada se nazivi polja ne raspadaju do pokazivača. Da biste saznali više, posjetite: Kada se ime niza ne raspada u pokazivač?

Primjer 2: Ime niza koristi se kao pokazivač

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

Izlaz

 Unesite 5 brojeva: 2,5 3,5 4,5 5 2 Prikazivanje podataka: 2,5 3,5 4,5 5 2

Ovdje,

  1. Prvo smo upotrijebili oznaku pokazivača za spremanje brojeva koje je korisnik unio u niz polja.

     cin>> *(arr + i) ;

    Ovaj je kod ekvivalentan donjem kodu:

     cin>> arr(i);

    Primijetite da nismo proglasili zasebnu varijablu pokazivača, već koristimo ime polja arr za oznaku pokazivača.

    Kao što već znamo, naziv niza arr pokazuje na prvi element niza. Dakle, o arr-u možemo razmišljati kao o pokazivaču.

  2. Slično tome, tada smo koristili forpetlju za prikaz vrijednosti arr pomoću oznake pokazivača.

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

    Ovaj je kod ekvivalentan

     cout << arr(i) << endl ;

Zanimljivi članci...