Cerca nel sito:
ricerca
avanzata

Frasi Celebri...

Un chiodo tira un altro, ma quattro fanno una croce.

Cesare Pavese 

Sondaggio:

Con quale presentatrice/showgirl passereste una "notte di fuoco"?

Paola Barale
Patrizia Rossetti
Paola Perego
Licia Colò
Milli Carlucci
Gabriella Golia
Paola Saluzzi

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-2009 Cataldo Sasso