per esempio: se devi passare una variabile di tipo struct ad una funzione cosa accade?
se passi il nome della variabile struct, la struttura stessa verrà passata per valore, quindi all'interno della funzione si creerà una copia della variabile struct.
se invece passi un puntatore che punta alla variabile struct, passerai l'indirizzo della variabile (passaggio per riferimento) e quindi non si creerà una copia di struct.
se la tua struct presenta al suo interno migliaia e migliaia di record, capisci che l'utilizzo di un puntatore diventa necessario...
altro esempio: un vettore dichiarato come tale
è limitato dal fatto che esso potrà riferirsi sempre e solamete a quel specifico indirizzo di memoriacodice:v[size]
un vettore dichiarato in questo modo
è più svincolato da certe restrizioni: puoi utilizzarlo come vettore, ma poi puoi utilizzarlo anche per un altro vettore da te dichiarato cambiandone l'indirizzo di memoria.codice:*v