in parole povere:La & serve per sapere a che posizione in memoria si trova la variabile in questione, ossia il suo indirizzo. Per sapere le dimensioni di una variabile c'è l'operatore sizeof.
& ti dice dove si trova?
* ti dice il contenuto della variabile in questione?
faccio un esempio:La 3 è concettualmente sbagliata, perché si cerca di assegnare ad un intero un puntatore, il che non ha senso. (in alcuni casi si fa, ma per motivi "di forza maggiore")
In ogni caso, x assumerebbe il valore corrispondente al suo indirizzo in memoria. Supponendo, come suppone l'esempio, che x si trovi alla locazione di memoria 100, allora x assumerà il valore 100. Il valore del puntatore è l'indirizzo a cui punta, non è ciò che in esso è contenuto, proprio per questo è necessario usare l'operatore * per ottenere il valore che si trova nella zona di memoria a cui il puntatore punta.
se x si trova nella posizione 1 della memoria il puntatore assume 1 come valore della memoria ma non come valore effettivo ( quello rimane 10) giusto?
si è stato uno sbaglio hai ragionePer inciso, il termine "script" si usa solo per alcuni linguaggi interpretati, in C si parla di "file sorgente" (o di applicazione compilata, se si parla del binario dato in output dal compilatore).![]()
ok quindi pointer cosi perdera sia la memoria che il valore di x? e prendera quella di y, quindi x e y condivideranno la stassa memoria e valore effettivo insieme al poiter?la memoria a cui punta pointer (e quindi di fatto x) assumerà il valore che ha y.codice:*pointer=y;
in questo caso succede che pointer si trasferisce sulla memoria di y senza cambiargli il valore effettivo?Se tu invece vuoi fare sì che il puntatore punti a y, dovrai fare:
codice:pointer=&y;
per esempioNon devi fare confusione tra il puntatore e ciò a cui punta. Come detto, il valore di una variabile puntatore è l'indirizzo a cui punta, non ciò che si trova a quell'indirizzo, per cui se assegni ad un puntatore qualcosa (senza specificare l'operatore *), vai a modificare l'indirizzo a cui punta. Al contrario, se applichi l'operatore * ad un puntatore stai andando ad operare sul valore a cui il puntatore punta.
int *pointer;
pointer = &x; /*qui pointer entra nello stesso spazio di memoria di x ma non ne prende il contenuto */
y = *pointer; /*invece qui non prende l'indirizzo memoria ma solo il contenuto?*/
è normale che non riesco a capire tutto il procedimento? succede a tutti quando inziano?
un altra cosa, solitamente per cosa vengono usati i pointer in forma pratica?
grazie per la pazienza![]()

Rispondi quotando
) un puntatore non è altro che una sorta di controfigura (come per gli attori) mi spiego meglio, lui prende l'indirizzo di memoria dove si trova un altra variabile, la memorizza e dopo la puoi usare come se fosse lei per assegnarli un altro valore.
