Una digressione su array e puntatori potrebbe portare via moltissimo tempo; in questo ambito ci limitiamo ad accennare alla correlazione tra i due strumenti a disposizione nel linguaggio C.
L'aspetto che accomuna i puntatori e gli array è sostanzialmente il fatto che entrambi sono memorizzati in locazioni di memoria sequenziali, ed è quindi possibile agire su un array (se lo si vede come una serie di blocchi ad indirizzi di memoria sequenziali) come se si stesse agendo su un puntatore (e viceversa); ad esempio se dichiariamo un array "alfa" ed un puntatore "pointer":
// definisco un array ed una variabile intera int alfa[20], x; // creo il puntatore int *pointer; // puntatore all'indirizzo di alfa[0] pointer = & alfa[0]; // x prende il valore di pointer, cioè di alfa[0] x = *pointer;
Se volessi scorrere, ad esempio, alla posizione i-ma
dell'array, basterebbe incrementare il puntatore di i
; cioè
pointer + i "è equivalente a " alfa[i]
Graficamente questo viene rappresentato come:
0 1 2 3 4 ... n __ __ __ __ __ __ __ alfa |__|__|__|__|__|__|__| pointer +1 +2 .. +i
Comunque tra array e puntatori ci sono sostanziali differenze:
- Un puntatore è una variabile, sulla quale possiamo eseguire le più svariate operazioni (come l'assegnamento).
- Un array non è una variabile convenzionale (è un contenitore di variabili) ed alcune operazioni da array a puntatore potrebbero non essere permesse.