AN Fondam98 Puntatori Azioni e procedure Assegnamenti, indirizzi e puntatori
AN Fondam98 Puntatori Una procedura senza effetti void f( int x, int y){ int z=x; x = y; y = z; } int a=3; int b=4; f(a,b); 3 a 4 b
AN Fondam98 Puntatori C / Java x=y copia il valore 4 nella cella di indirizzo che contiene la copia di a 3 a 4 b 3 x 4 y
AN Fondam98 Puntatori Una procedura che scambia void f( int x[]){ int z=x[0]; x[0] = x[1]; x[1] = z; } int[] a={3,4}; f(a); //a e cambiato 3 a 4
AN Fondam98 Puntatori Java a 4 3 a[0] a[1] x x[0] = x[1]; copia il valore 4 nella cella di indirizzo
AN Fondam98 Puntatori C 3 a 4 x x[0] = x[1]; copia il valore 4 nella cella di indirizzo
AN Fondam98 Puntatori Gli operatori & e * del C int x = 3; x = x; R-value L-value &x&x *(&x)
AN Fondam98 Puntatori Gli operatori & e * del C int x = 3; Lassegnamento *&x = *&x+1; equivale a x = x+1;
AN Fondam98 Puntatori Puntatori in C int* x; la variabile x e un puntatore, destinata ad avere come r-value lindirizzo di una cella di memoria
AN Fondam98 Puntatori Puntatori in C int* x; int y = 4; x = &y; x 4 y
AN Fondam98 Puntatori Puntatori in C int* x; int y = 4; x = &y; x 4 y R-value di x = L-value di x = R-value di *x = 4 L-value di *x =
AN Fondam98 Puntatori Operazioni sui puntatori u Assegnamento di valori (compatibili) –espressi come indirizzi di variabili –espressi come valori di puntatori –espresso come NULL (#include ) u Applicazione delloperatore * (dereferenziamento) u Confronti con valori di altri puntatori u Operazioni + e -
AN Fondam98 Puntatori Puntatori e type system int x = 3; double y = 3.0; int* px = &x; double* py = &y; int* q; q = px; //ok q = py; u Warning: assignment from incompatible pointer type
AN Fondam98 Puntatori Puntatori e type system int x = 3; double y = 3.0; int* px = &x; double* py = &y; int* q; *px= *py = 5.4; //ok cambiano i valori associati a y e a x u x vale 5
AN Fondam98 Puntatori La procedura swap (in C) void swap( int* x, int* y){ int z = *x; *x = *y; *y = z; } int a=3; int b=4; swap(&a,&b);
AN Fondam98 Puntatori C *x = *y copia il valore 4 nella cella di indirizzo ottenuto come l-value di *x 3 a 4 b x y