PDA

Visualizza la versione completa : C++ <basi di programmazione>


tony83
20-04-2005, 18:43
che differenza c'è passare un indirizzo e un valore?

unit1
20-04-2005, 19:28
che io sappa l'indirizzo è l'indirizzo che punta alla variabile il valore è il valore della variabile.

tony83
20-04-2005, 20:25
in che senso:

l'indirizzo è l'indirizzo che punta alla variabile?

potresti farmi un esempio molto gentilmente? GRAZIE CIAO

:) :ciauz: :ciauz:

Squall1988
20-04-2005, 22:27
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.




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
}


chiamando

LeleFT
21-04-2005, 10:32
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:


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'
}

Qualsiasi modifica tu faccia alla variabile var non avrà alcun effetto sulla variabile 'a', poiché essa rappresenta solo una copia.

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:


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 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).

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. :ciauz:

tony83
21-04-2005, 17:11
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???



:ciauz: :ciauz: :ciauz: :ciauz: :ciauz:

LeleFT
21-04-2005, 17:54
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. :ciauz:

Loading