Un puntatore e' un tipo di dato, una variabile che contiene l'indirizzo
in memoria di un'altra variabile. Si possono avere puntatori a qualsiasi tipo
di variabile.
Quindi il puntatore è una variabile esempio: int *puntatore; se ho capito bene.

Non ho capito bene però il discorso della memoria, dice, che contiene l'indirizzo in memora, inteso come byte, esepio CHAR 1 byte?

E se ho capito bene alla fine dice che si possono avere puntatori Char int, float e Doble giusto?


La dichiarazione di un puntatore include il tipo dell'oggetto a cui il
puntatore punta.
In C ogni variabile ha due tipi di valori: una locazione e un valore
contenuto in quella locazione.
Qui dice, che se come uso come puntatore un int dovro usare solo variabili int?
allora la variabile ha due tipi di valori da quanto dice qui, ora faccio un esempio da come ho capito io:

int x = 10;

la locazione è 4 byte perche int occupa 4 byte
il valore del esempio invece è 10 perche è il valore della variabile.

questa parte è giusta?

L' operatore & (operatore unario, o monadico) fornisce l'indirizzo di una
variabile.
L' operatore * (operatore indiretto, o non referenziato) da' il contenuto
dell'oggetto a cui punta un puntatore.
& serve per sapere la grandezza in byte della variabile oppure per sapere che preciso spazio nella memoria è allocata?

* questo serve solo ad ottenere il contenuto? come prima nell esempio int x = 10; serve a recuperare il 10?

int *pointer; /* dichiara pointer come un puntatore a int */
int x=1,y=2;

(1) pointer= &x; /* assegna a pointer l'indirizzo di x */
(2) y=*pointer; /* assegna a y il contenuto di pointer */
(3) x=pointer /* assegna ad x l'indirizzo contenuto in pointer */
(4) *pointer=3; /* assegna al contenuto di pointer il valore 3 */
spiegazione fornita dal sito:

L'istruzione (1) fa si che pointer punti alla locazione di memoria 100
(quella di x).
La (2) fa si che y assuma valore 1 (il valore di x).
La (3) fa si che x assuma valore 100 (cioe' il valore di pointer).
La (4) fa si che il valore del contenuto di pointer sia 3 (quindi x=3).
allora, nella iestruzione 1, succede che pointer si sposta nella stessa memoria di x?

nella 2 succede che y prende il valore di x perche il pointer è nello stesso spazio della memoria?

nella 3 perche x assume un valore di 100 da pointer se pointer non ha un valore specificato nello script?
Da come avevo capito io pointer valeva 1 e non 100.

Nella 4 fa vedere che se io cambio il valore a point con un altro dato di conseguenza anche la variabile associata cambia.
Però se io al posto di cambiare il contenuto di point con un numero come nell esempio lo faccio con una variabile cosa succede? pointer lascia x per l'altra variabile? e se si, x assume sempre il valore dell'altra variabile prima di essere lasciato da pointer?

Vale la pena considerare cosa succede al "livello macchina" in memoria per
capire completamente come funzionano i puntatori.
Supponiamo che la variabile x si trovi nella locazione di memoria 100, y nella
200 e pointer nella 1000 (ricordiamo che pointer e' una variabile a tutti gli
effetti, e cosi' il suo valore necessita di essere memorizzato da qualche
parte; e' la caratteristica del valore dei puntatori che risulta nuova).

Cosa intende qui per locazione di memoria 100, 200 o 1000? non riesco proprio a capirlo =(