Esatto.Originariamente inviato da gennahouse
Quindi il puntatore è una variabile esempio: int *puntatore; se ho capito bene.
No. L'indirizzo di memoria non è la dimensione della variabile a cui punta, ma la sua posizione in memoria.Non ho capito bene però il discorso della memoria, dice, che contiene l'indirizzo in memora, inteso come byte, esepio CHAR 1 byte?
Si possono avere puntatori a qualunque tipo. In linea concettuale, un puntatore può puntare a qualunque cosa (le dimensioni di un indirizzo sono le medesime per qualunque tipo), il tipo di puntatore serve solo per dare un'interpretazione di cos'è ciò a cui il puntatore punta.E se ho capito bene alla fine dice che si possono avere puntatori Char int, float e Doble giusto?
Un puntatore a int può puntare solo a variabili int. (in pratica poi si possono fare delle forzature tramite cast, ma questo per ora non ti interessa)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,
No. La dimensione della variabile è 4 byte. Sulla sua posizione in memoria in linea di principio non si può dire nulla, se non che la si può ricavare tramite l'operatore &.ora faccio un esempio da come ho capito io:
int x = 10;
la locazione è 4 byte perche int occupa 4 byte
Esatto.il valore del esempio invece è 10 perche è il valore della variabile.
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.& serve per sapere la grandezza in byte della variabile oppure per sapere che preciso spazio nella memoria è allocata?
* serve per ottenere il contenuto dell'indirizzo a cui punta un puntatore. Naturalmente si usa solo con i puntatori, nel senso che con variabili non-puntatori per ottenerne il valore non bisogna fare nulla di speciale.* questo serve solo ad ottenere il contenuto? come prima nell esempio int x = 10; serve a recuperare il 10?
Sì; per dirla più correttamente, a pointer viene assegnato l'indirizzo di memoria di x.allora, nella iestruzione 1, succede che pointer si sposta nella stessa memoria di x?
Perché pointer punta allo stesso spazio di memoria di x.nella 2 succede che y prende il valore di x perche il pointer è nello stesso spazio della memoria?
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")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.
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.
Per 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).
No. Se tu faiNella 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?
la memoria a cui punta pointer (e quindi di fatto x) assumerà il valore che ha y. Se tu invece vuoi fare sì che il puntatore punti a y, dovrai fare:codice:*pointer=y;
Non 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.codice:pointer=&y;
Semplificando molto, la memoria del computer la si può vedere come una sequenza contigua di byte; quando dichiari una variabile, questa viene messa in un certo posto in memoria; per riferirsi a questo posto, si usa la distanza in byte dall'inizio della memoria, ossia il suo indirizzo di memoria.Cosa intende qui per locazione di memoria 100, 200 o 1000? non riesco proprio a capirlo =(