SlideShare a Scribd company logo
PUNTATORI
Che cosa sono? 
 Un puntatore è una variabile che contiene l'indirizzo di memoria di un altra 
variabile, si dichiara specificando il tipo della variabile puntata, ad 
esempio: 
int *p; 
 Posso dichiarare anche un puntatore a puntatore: 
int ** p
Operatori: 
 Gli operatori che useremo con i puntatori sono due: 
 L’operatore «&», che ci fornisce l’indirizzo della variabile 
 L’operatore «*», che ci da il contenuto dell’oggetto a cui punta il puntatore 
Es: 
p= &a; assegna a p l’indirizzo di a 
b=*p; assegna a b il contenuto di p, che in questo caso sarebbe l’indirizzo di a 
*p=2; assegna al contenuto di pointer il valore 2
Assegnazione di un valore 
Gli indirizzi di memoria non possono essere assegnati da istruzioni di 
programma, ma vengono determinati in fase di esecuzion, quindi possiamo 
assegnare valori ai puntatori solo in questi casi: 
 Se devo assegnargli il valore NULL, cioè non punta a niente: int * p= 
NULL; 
 Se devo assegnargli l’indirizzo di una variabile esistente: 
int a; 
int* p; 
p = &a; 
Altri tipi di assegnamento vengono considerati errori
Puntatori a void 
 Questo tipo di puntatori possono puntare a qualsiasi tipo di variabile: 
void * p; 
 A un puntatore a void si può assegnare il valore di qualunque puntatore, ma non si 
può fare viceversa: 
int* a; 
void* p; 
p = a; //posso assegnare a p, il valore a 
a= (int*)p; // cosi assegno ad a l’indirizzo a cui punta p
Funzioni con puntatori 
 Quando passo un argomento di indirizzo in una chiamata a funzione: 
funzione( &a ) 
 nella dichiarazione di funzione e nella definizione devo dichiarare il 
corrispondente come puntatore, specificando il tipo 
void funzione(int* p) 
L’argomento viene passato per valore.
Aritmetica dei puntatori 
 Le operazioni sui puntatori dipendono dal tipo a cui si fa riferimento, ad 
esempio per incrementare o decrementare un puntatore dichiaro un 
puntatore double: double *p; 
Se faccio questa operazione: p+1; 
Non incremento il mio valore di 1 ma punto all’indirizzo di p+8, 8 è la 
dimensione del tipo double. 
Se scrivo p+k corrisponde all’inidirizzo di p+k*8 
 Invece se scrivo: *(p+1) corrisponde all’oggetto puntato da p+1

More Related Content

More from Lorena Rojas

FLAT DESIGN
FLAT DESIGNFLAT DESIGN
FLAT DESIGN
Lorena Rojas
 
Programmazione ad oggetti
Programmazione ad oggettiProgrammazione ad oggetti
Programmazione ad oggetti
Lorena Rojas
 
Strutture dinamiche e astratte
Strutture dinamiche e astratteStrutture dinamiche e astratte
Strutture dinamiche e astratte
Lorena Rojas
 
Funzioni ricorsive
Funzioni ricorsiveFunzioni ricorsive
Funzioni ricorsive
Lorena Rojas
 
Funzioni
FunzioniFunzioni
Funzioni
Lorena Rojas
 
Creazione blog
Creazione blogCreazione blog
Creazione blog
Lorena Rojas
 

More from Lorena Rojas (6)

FLAT DESIGN
FLAT DESIGNFLAT DESIGN
FLAT DESIGN
 
Programmazione ad oggetti
Programmazione ad oggettiProgrammazione ad oggetti
Programmazione ad oggetti
 
Strutture dinamiche e astratte
Strutture dinamiche e astratteStrutture dinamiche e astratte
Strutture dinamiche e astratte
 
Funzioni ricorsive
Funzioni ricorsiveFunzioni ricorsive
Funzioni ricorsive
 
Funzioni
FunzioniFunzioni
Funzioni
 
Creazione blog
Creazione blogCreazione blog
Creazione blog
 

Puntatori C++

  • 2. Che cosa sono?  Un puntatore è una variabile che contiene l'indirizzo di memoria di un altra variabile, si dichiara specificando il tipo della variabile puntata, ad esempio: int *p;  Posso dichiarare anche un puntatore a puntatore: int ** p
  • 3. Operatori:  Gli operatori che useremo con i puntatori sono due:  L’operatore «&», che ci fornisce l’indirizzo della variabile  L’operatore «*», che ci da il contenuto dell’oggetto a cui punta il puntatore Es: p= &a; assegna a p l’indirizzo di a b=*p; assegna a b il contenuto di p, che in questo caso sarebbe l’indirizzo di a *p=2; assegna al contenuto di pointer il valore 2
  • 4. Assegnazione di un valore Gli indirizzi di memoria non possono essere assegnati da istruzioni di programma, ma vengono determinati in fase di esecuzion, quindi possiamo assegnare valori ai puntatori solo in questi casi:  Se devo assegnargli il valore NULL, cioè non punta a niente: int * p= NULL;  Se devo assegnargli l’indirizzo di una variabile esistente: int a; int* p; p = &a; Altri tipi di assegnamento vengono considerati errori
  • 5. Puntatori a void  Questo tipo di puntatori possono puntare a qualsiasi tipo di variabile: void * p;  A un puntatore a void si può assegnare il valore di qualunque puntatore, ma non si può fare viceversa: int* a; void* p; p = a; //posso assegnare a p, il valore a a= (int*)p; // cosi assegno ad a l’indirizzo a cui punta p
  • 6. Funzioni con puntatori  Quando passo un argomento di indirizzo in una chiamata a funzione: funzione( &a )  nella dichiarazione di funzione e nella definizione devo dichiarare il corrispondente come puntatore, specificando il tipo void funzione(int* p) L’argomento viene passato per valore.
  • 7. Aritmetica dei puntatori  Le operazioni sui puntatori dipendono dal tipo a cui si fa riferimento, ad esempio per incrementare o decrementare un puntatore dichiaro un puntatore double: double *p; Se faccio questa operazione: p+1; Non incremento il mio valore di 1 ma punto all’indirizzo di p+8, 8 è la dimensione del tipo double. Se scrivo p+k corrisponde all’inidirizzo di p+k*8  Invece se scrivo: *(p+1) corrisponde all’oggetto puntato da p+1