- 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.