Puntatori
Linguaggio C
Puntatori in C



Un puntatore è una variabile che contiene un indirizzo di memoria.
Quando una variabile contiene l’indirizzo di un’altra variabile, si dice che la
prima punta alla seconda.
Utilità dei puntatori:


Nelle funzioni (passaggio per referenza, che permette la modifica degli argomenti in
input);
Per l’allocazione dinamica della memoria (definizione di strutture dati di dimensione
variabile)
Definizione e operazioni sui puntatori








Dichiarazione e definizione di un puntatore che punta a una locazione di
memoria contenenti un certo tipo di dato:
tipo *nome_variabile
es. int *x; char *y;
& (operatore unario che restituisce l’indirizzo di memoria dell’operando)
Es. se la variabile n è allocata all’indirizzo 1200.
Dopo l’esecuzione dell’istruzione:
x=&n
il valore di x è 1200.
Operatori
* (operatore unario che restituisce il valore della locazione di memoria
puntata dall’operando).
 Es. se la variabile x ha come valore 1200, e la locazione 1200 contiene il
valore 555.
 Dopo l’esecuzione dell’istruzione: y=*x;
 Il valore di y è 555.
 I puntatori possono essere confrontati tra di loro
 * è il complemento di &.
void main(void){
void main(void){
int x,y;
int x,y;
int *p;
è equivalente a
y=x;
p=&x;
}
y=*p;
}

Allocazione dinamica della memoria




malloc() alloca porzioni contigue di memoria e restituisce
l’indirizzo della locazione iniziale
void *malloc(numero di byte)
free() libera porzioni di memoria
void free(void *p)
Es.
char *p;
p=malloc(1000);
alloca 1000 byte in sequenza e p punta alla locazione iniziale.

La zona di memoria allocata attraverso malloc si trova in un'area di
memoria speciale, detta heap (memoria dinamica).
NULL


La costante NULL è di tipo void* (quindi compatibile con
tutti i tipi puntatore)
indica un puntatore che non punta a nulla: non può essere
dereferenziato
Esempio – vettore dinamico
int main (){
int dimesione,i;
int *vet;
//sarà l’array dinamico
printf(“Dimensione dell’array da allocare?");
scanf("%d",&dimensione);
vet=malloc(dimensione*sizeof(int));
vettore
// allocazione del
// esempio di inserimento valori
for(i=0;i<dimensione;i++)
{
printf(“Inserisci elemento v[%d]->",i);
scanf("%d",&vet[i]);
}
return 0;
}
Puntatori a strutture

Esempio di struttura:
struct punto {
double x;
double y;
};
struct punto p1;
struct punto *pun;
pun=&p1;



Notazione errata
*p1.x=5;
Notazione corretta
(*p1).x=5;
Notazione migliore
p1->x=5;
Scarica

Puntatori in C - Alberto Ferrari