Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introduzione al C
Unità 6 – Puntatori
i ? j 1
i 1 j 1
Puntatori - Unità 6 2013/2014 Pagina 8
Operatore & vs. operator *!
Se x è una variabile, &x denota l’indirizzo in memoria di
tale variabile.
&x ≡ α
indirizzo
nome α
int *p1;
... // allocazione di memoria (vedi dopo)
*p1 = 10;
int i, j, k;
int *pt_i, *pt_j;
pt_i = &i;
pt_j = &j;
i = 1;
j = 2;
k = *pt_i + *pt_j;
*pt_i = 10;
printf("i = %d\n", i);
printf("k = %d\n", k);
Puntatori - Unità 6 2013/2014 Pagina 12
Diagramma della memoria
Le variabili di tipo int i, j, k, vengono manipolate
attraverso i puntatori alle locazioni di memoria ad esse
associate al momento della dichiarazione.
i = 10
k = 3
int main() {
int *ptr;
ptr = 1000;
Cosa stampa
*ptr = 5;
printf("%d\n", *ptr); questo codice?
}
54327 54327
y 2 (1) y 2
pointer = &x;
12098 12098
pointer ? pointer 32456
54327 54327
y 2 (2) y 1
y = *pointer;
12098 12098
pointer 32456 pointer 32456
54327 54327
y 1 (3) y 1
x = pointer;
12098 12098
pointer 32456 pointer 32456
54327 54327
y 1 (4) y 1
*pointer = 3;
12098 12098
pointer 32456 pointer 32456
int *pti;
...
pt++;
double pi = 3.5;
double const *pt = π
(*pt)++; // OK (pi vale 4.5)
pt++; // NO (pt e’ costante)
const int k = 3;
const int *pt; // dichiarazione di puntatore
// a costante
pt = &k; // OK
pt++; // ammesso anche se non si sa cosa
// vada a puntare pt
int *pti;
pti = &k; // NO
void *pt;
int i;
pt = &i;
void * pt;
int i;
pt = &i;
int * pti;
pti = (int*)pt; // il valore è convertito
// a puntatore a int
Esempio
char a = 'r';
int size_a;
size_a = sizeof a;
size_a = sizeof(a);
int size_float;
x = 12
y = 27
after swap
x = 27
y = 12
Parametro Parametro
formale formale
di tipo puntatore di tipo puntatore
ad int a double
int main () {
double *pd = puntatore(5.4);
printf("pd = %p\n", pd);
printf("*pd = %f\n", *pd);
return 0; la funzione puntatore crea un puntatore ad
} una variabile di tipo double e la inizializza
con il valore passato come argomento
Puntatori - Unità 6 2013/2014 Pagina 51