






















Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Una introduzione ai puntatori in c++ con esempi pratici sulla dichiarazione, allocazione, deallocazione e l'uso degli operatori di indirizzo & e dereferenziazione *. Il documento copre anche la differenza tra puntatori e riferimenti.
Tipologia: Appunti
1 / 30
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!























[S. Dalí – The temptation of St. Anthony, 1946]
Principalmente per memorizzare indirizzi di array allocati in memoria dinamica Ma i puntatori possono essere utilizzati per riferire oggetti di ogni tipo *int p=new int[N];
*main() { int p ; // puntatore ad un oggetto di // tipo int p = new int ; // allocazione di un oggetto // dinamico di tipo int: // NON è un array! delete p ; // deallocazione di un oggetto // puntato da p }
*main() { struct s {int a, b ;} ; s p2 ; // punt. ad un oggetto di tipo s p2 = new s ; // allocazione di un oggetto // dinamico di tipo s: delete p2 ; // deallocazione oggetto // puntato da p }
Cosa rappresentano i seguenti oggetti? const int p // puntatore ad oggetto di tipo int, // non modificabile tramite p int * const p // puntatore costante ad oggetto di // tipo int int * p[10] // array di 10 puntatori ad int int (p)[10] // puntatore ad array di 10 interi int *p = new int[10] // puntatore (ad int) al I // elemento di un array di // 10 int allocato in // memoria dinamica
L'operatore di indirizzo & restituisce l'indirizzo di memoria dell'oggetto a cui viene applicato Operatore unario e prefisso Il risultato restituito dall'operatore di indirizzo può essere assegnato ad un puntatore ad un oggetto dello stesso tipo
*main() { int i, j; int p = &i; int * const p2 = &j; //in alcuni casi //è bene usare questa //definizione p = p2; // equivale a p = indirizzo di j int k; p2 = &k; // genera un errore a tempo di // compilazione – p2 costante }
Per accedere all'oggetto riferito da un puntatore si usa l' *operatore di dereferenziazione ** Operatore unario e prefisso Si dice che il puntatore viene dereferenziato L'operatore * applicato ad un puntatore ritorna un riferimento all'oggetto puntato
L'uso dei puntatori è una delle aree più inclini ad errori della programmazione moderna Alcuni linguaggi come Java, C# e Visual Basic non forniscono alcun tipo di dato puntatore Problemi tipici:
Il valore di un puntatore, così come del risultato dell'operatore di indirizzo & , può essere stampato mandandolo sullo stream di uscita mediante l'operatore << Di norma l'operatore << mette sullo stream di uscita la sequenza di caratteri che rappresenta il valore di un puntatore in base 16 Vedi programma indirizzo_punt.cc
main() { struct s {int a, b;} s1; s p2; // punt. ad un oggetto di tipo s p2 = &s1; (p2).a = 3; // equivalente a s1.a = 3 p2->a = 3; // equivalente all'istruzione // precedente }
int & rif = n; Definisce una variabile rif di tipo “riferimento a int” e la inizializza al valore n rif è un sinonimo di n ESEMPIO void main() { int n=75; int & rif=n; cout<<“n=”<<n<<”, rif=”<<rif<<”, “; rif = 30; cout<<“n=”<<n<<”, rif=”<<rif<<”, “; } Stampa: n=75, rif=75, n=30, rif=