Puntatori e matrici C ++

In questo tutorial, impareremo la relazione tra array e puntatori con l'aiuto di esempi.

In C ++, i puntatori sono variabili che contengono indirizzi di altre variabili. Un puntatore non solo può memorizzare l'indirizzo di una singola variabile, ma può anche memorizzare l'indirizzo delle celle di un array.

Considera questo esempio:

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

Qui, ptr è una variabile puntatore mentre arr è un intarray. Il codice ptr = arr;memorizza l'indirizzo del primo elemento dell'array nella variabile ptr.

Notare che abbiamo usato arrinvece di &arr(0). Questo perché entrambi sono la stessa cosa. Quindi, il codice seguente è lo stesso del codice sopra.

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

Gli indirizzi per il resto degli elementi dell'array sono date da &arr(1), &arr(2), &arr(3)e &arr(4).

Puntare a ogni elemento della matrice

Supponiamo di dover puntare al quarto elemento dell'array utilizzando lo stesso puntatore ptr.

Qui, se ptr punta al primo elemento nell'esempio precedente, allora ptr + 3punterà al quarto elemento. Per esempio,

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

Allo stesso modo, possiamo accedere agli elementi utilizzando il puntatore singolo. Per esempio,

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

Supponiamo di aver inizializzato ptr = &arr(2);allora

 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);
Utilizzo di puntatori C ++ con array

Nota: l'indirizzo tra ptr e ptr + 1 differisce di 4 byte. È perché ptr è un puntatore a un intdato. Inoltre, la dimensione di int è di 4 byte in un sistema operativo a 64 bit.

Allo stesso modo, se il puntatore ptr punta al chartipo di dati, l'indirizzo tra ptr e ptr + 1 è 1 byte. È perché la dimensione di un carattere è di 1 byte.

Esempio 1: puntatori e matrici C ++

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

Produzione

 Visualizzazione dell'indirizzo utilizzando gli array: & arr (0) = 0x61fef0 & arr (1) = 0x61fef4 & arr (2) = 0x61fef8 Visualizzazione dell'indirizzo utilizzando i puntatori: ptr + 0 = 0x61fef0 ptr + 1 = 0x61fef4 ptr + 2 = 0x61fef8

Nel programma precedente, abbiamo prima semplicemente stampato gli indirizzi degli elementi dell'array senza usare la variabile pointer ptr.

Quindi, abbiamo usato il puntatore ptr per puntare all'indirizzo di a (0), ptr + 1per puntare all'indirizzo di a (1) e così via.

Nella maggior parte dei contesti, i nomi degli array decadono in puntatori. In parole semplici, i nomi degli array vengono convertiti in puntatori. Questo è il motivo per cui possiamo usare i puntatori per accedere agli elementi degli array.

Tuttavia, dobbiamo ricordare che i puntatori e gli array non sono la stessa cosa.

Ci sono alcuni casi in cui i nomi degli array non decadono in puntatori. Per saperne di più, visita: Quando il nome dell'array non decade in un puntatore?

Esempio 2: nome dell'array utilizzato come puntatore

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

Produzione

 Immettere 5 numeri: 2,5 3,5 4,5 5 2 Visualizzazione dati: 2,5 3,5 4,5 5 2

Qui,

  1. Per prima cosa abbiamo utilizzato la notazione del puntatore per memorizzare i numeri inseriti dall'utente nell'array arr.

     cin>> *(arr + i) ;

    Questo codice è equivalente al codice seguente:

     cin>> arr(i);

    Si noti che non abbiamo dichiarato una variabile puntatore separata, ma piuttosto stiamo usando il nome dell'array arr per la notazione del puntatore.

    Come già sappiamo, il nome dell'array arr punta al primo elemento dell'array. Quindi, possiamo pensare ad arr come a un puntatore.

  2. Allo stesso modo, abbiamo quindi utilizzato forloop per visualizzare i valori di arr utilizzando la notazione del puntatore.

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

    Questo codice è equivalente a

     cout << arr(i) << endl ;

Articoli interessanti...