Cerca nel sito:
ricerca
avanzata

Frasi Celebri...

Preferisco credere che Dio non esista piuttosto che credere che sia indifferente.

George Sand 

Sondaggio:

La Ferrari ?...

Una leggenda
La storia
Schumacher
L'auto per eccellenza
Un sogno

visualizza risultati


 

Puntatori vs array

Esiste una stretta somiglianza tra puntatori e array dovuta alla possibilita` di dereferenziare un puntatore nello stesso modo in cui si seleziona l'elemento di un array e al fatto che lo stesso nome di un array e` di fatto un puntatore al primo elemento dell'array:

 

int Array[] = { 1, 2, 3, 4, 5 };
int* Ptr = Array;       // equivale a Ptr = &Array[0];

cout << Ptr[3] << endl; // Ptr[3] equivale a *(Ptr+3);
Ptr[4] = 7;             // equivalente a *(Ptr+4) = 7;

 

 

La somiglianza diviene maggiore quando si confrontano array e puntatori a caratteri:

 

char Array[] = "Una stringa";
char* Ptr = "Una stringa";

// la seguente riga stampa tutte e due le stringhe
// si osservi che non e` necessario dereferenziare
// un char* (a differenza degli altri tipi di
// puntatori)

cout << Array << " == " << Ptr << endl;

// in questo modo, invece, si stampa solo un carattere:
// la dereferenzazione di un char* o l'indicizzazione
// di un array causano la visualizzazione di un solo
// carattere perche` in effetti si passa all'oggetto
// cout non un puntatore a char, ma un oggetto di tipo
// char (che cout tratta giustamente in modi diversi)

cout << Array[5] << " == " << Ptr[5] << endl;
cout << *Ptr << endl;

 

 

In C++ le dichiarazioni char Array[] = "Una stringa" e char* Ptr = "Una stringa" hanno lo stesso effetto, entrambe creano una stringa (terminata dal carattere nullo) il cui indirizzo e` posto rispettivamente in Array e in Ptr, e come mostra l'esempio un char* puo` essere utilizzato esattamente come un array di caratteri.
Esistono tuttavia profonde differenze tra puntatori e array: un puntatore e` una variabile a cui si possono applicare le operazioni viste sopra e che puo` essere usato come un array, ma non e` vero il viceversa, in particolare il nome di un array non e` un puntatore a cui e` possibile assegnare un nuovo valore (non e` cioe` modificabile). Ecco un esempio:

 

char Array[] = "Una stringa";
char* Ptr = "Una stringa";

Array[3] = 'a';     // Ok!
Ptr[7] = 'b';       // Ok!
Ptr = Array;        // Ok!
Ptr++;              // Ok!
Array++;            // Errore, tentativo di assegnamento!

 

 

In definitiva un puntatore e` piu` flessibile di quanto non lo sia un array, anche se a costo di un maggiore overhead.

 

successivo
–«  INDICE  »–

 

 

 

 
Powered by paper&pencil (carta&matita ) - Copyright © 2001-2022 Cataldo Sasso