che differenza c'è passare un indirizzo e un valore?
che differenza c'è passare un indirizzo e un valore?
che io sappa l'indirizzo è l'indirizzo che punta alla variabile il valore è il valore della variabile.
in che senso:
l'indirizzo è l'indirizzo che punta alla variabile?
potresti farmi un esempio molto gentilmente? GRAZIE CIAO
![]()
![]()
![]()
se passi per valore, la variabile passata non è modificata, se passi per indirizzo (o reference, come preferisci) l'effetto si ripercuote, xkè non viene fatta una copia del valore della variabile, ma si "PUNTA" all'indirizzo di memoria della variabile, quindi modifichi il contenuto della cella di memoria e ovviamente il contenuto.
esempio.
chiamandocodice:void indirizzo (int *x) { *x = 5 * (*x); } int valore (int x) { return 5*x; } void main() { int prova = 10; cout << valore (prova); // Stampa 50 // prova vale ancora 10 cout << prova ; // Stampa 10 indirizzo (&prova); // Ora prova ha cambiato valore cout << prova ; // Stampa 50 }
*********************************
Andrea
*********************************
Passare una variabile ad una funzione per valore significa fare in modo che la funzione operi con una variabile diversa che contiene lo stesso valore di quella passata. Esempio:
Qualsiasi modifica tu faccia alla variabile var non avrà alcun effetto sulla variabile 'a', poiché essa rappresenta solo una copia.codice:int main() { int a = 10; chiamaFunzione(a); // Passo la variabile 'a' per valore cout << a << endl; return 0; } void chiamaFunzione(int var) { var++; // La funzione lavora con la variabile 'var' // che contiene una copia del valore di 'a' }
Passando, invece, per indirizzo non viene effettuata alcuna copia del valore, ma la variabile della funzione punterà alla variabile passata, utilizzando, effettivamente, quella variabile per l'elaborazione. Esempio:
Il primo esempio stampa il valore 10, perchè la variabile non viene cambiata di valore (solo la copia viene cambiata, ma poi viene persa quando la funzione ritorna).codice:int main() { int a = 10; chiamaFunzione( &a ); // passo la variabile per indirizzo cout << a << endl; return 0; } void chiamaFunzione(int *var) { (*var)++; // Ora modifico la variabile 'a' }
Il secondo esempio, invece, stampa il valore 11 perché la funzione, effettivamente, modifica il valore della variabile che le viene passata.
Ovviamente, se la variabile che viene passata alla funzione non deve essere modificata, ma serve alla funzione solo per la sua elaborazione, passarla per valore o per indirizzo non cambia assolutamente niente. Le implicazioni dell'utilizzo dell'uno o dell'altro metodo, in quest'ultimo caso, si vedrebbero solamente quando si fa uso di programmazione concorrente, utilizzando i thread.
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
in pratica ho capito ma concettualmente mi suona male il concetto di indirizzo, nel senso non è una valore ma un indirizzo, indirizzo che vuol dire che trova la posizione della variabile? trovata la posizione della variabile acchiappa il suo corrispettivo valore?
ho capito bene???
![]()
![]()
![]()
![]()
![]()
L'indirizzo è proprio l'indirizzo in memoria di una variabile.
La memoria è una specie di lista di byte: ciascun byte ha un numero che lo identifica. Questo numero si chiama "indirizzo". Ciascuna variabile deve risiedere in memoria, quindi, ciascuna variabile avrà un indirizzo.
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza