- l'operatore * applicato ad un puntatore per estrarre o assegnare il valore sottostante viene chiamato dereferenza, ovvero un puntatore viene dereferenziato per accedere alla variabile puntata. - l'operatore & applicato ad una variabile restituisce l'indirizzo della variabile, ovvero un puntatore alla variabile. - l'accesso alla memoria tramite puntatore e' determinato dal suo tipo: -- char* o void*: "vede" la memoria come una sequenza di singoli byte -- short* (intero con segno di lunghezza 16 bit): "vede" la memoria come una sequenza di word da 16 bit, ovvero di due byte -- int* (intero con segno di lunghezza 32 bit) "vede" la memoria come una sequenza di word da 32 bit, ovvero quattro byte L'operatore sizeof del C restituisce la lunghezza in byte di un tipo. L'aritmetica dei puntatori tiene conto dell'allineamento. Ad esempio, supponiamo che p sia 0x00, in tal caso: (char *)p + 1 => 0x01 (short*)p + 1 => 0x02 (int*)p + 1 => 0x04 (float*)p + 1 => 0x04 (sizeof(float) => 4) (long*)p + 1 => 0x08 (sizeof(long) => 8) (double*)p + 1=> 0x08 (sizeof(double) => 8) ... ovvero: p + 1 == (void*)p + sizeof(tipo di p) Questo caratteristica si chiama "allineamento della memoria" e si dice che il puntatore accede alla memoria "in maniera allineata a seconda del proprio tipo". Cambiando il tipo del puntatore, ad esempio con un cast, cambia l'allineamento di accesso.