Oppure

Loading
10/11/08 19:31
fabi3194
come si può capire della doanda, vorrei sapere cosa sono e come sono strutturati i passaggi per riferimento (sul mio manuale c'è scritto reference :-|)?grazie 8-|
aaa
10/11/08 23:23
eddiewrc
quando si parla di passaggi per valore o riferimento ci si riferisce al passaggio dei parametri dalla funzione all'ambiente chiamante. in assembly la cosa si capisce proprio molto bene, se hai tempo guardaci.

int funz(int x)

significa che la funzione funz restituisce un valore intero come risultato e prende come argomento un valore intero il cui parametro FORMALE ha nome x (qualsiasi nome di var va bene)


in java il passaggio è per valore, cioè la variabile che passi come argomento alla funzione viene in realtà duplicata e all'interno di funz viene usata la copia appena creata, senza modificare quindi il valore della variabile omonima presente nell'ambiente chiamante.

il passaggio per riferimento è diverso, invece del valore della variable viene passato proprio l'indirizzo di memoria della stessa, in modo che le modifiche fatte nella funzione apportino un effettivo cambiamento anche alla variabile nell'ambiente chimante.

i linguaggi che implementano davvero il passaggio byref sono pochissimi, forse il PROLOG e il c++.

il C per esempio usa un finto passaggio per riferimento: tutte le variabili vengono sempre passate per valore ma tramite i puntatori è possibile passare per valore l'indirizzo di memoria di una variabile, e l'effetto è lo stesso del passaggio byref.

ovviamente questo discorso è IMMENSO, ti conviene leggerlo da un buon manuale... pensa che all'uni c'è un esame intero su ste cose...

se hai (ovviamente) dubbi scrivi.



aaa
11/11/08 15:11
fabi3194
Grazie,ma continuo a non capire una cosa:
come si usa?
Mi faresti un piccolo esempio,così capisco subito
8-|8-|
aaa
11/11/08 18:37
eddiewrc
in java nn ho mai sentito parlare di passaggio per riferimento... esiste solo quello per valore!

il passaggi oper riferimento serve per modificare il valore della variabile passata anche nell'ambiente chiamante:

in C:

int i = 0;
void f(int *k)
{
*k = 7;
return;
}
void g(int k)
{
k = 1111;
return;
}
int main()
{
i = 3;
f(i);
write(i);
g(i);
write(i);
}

stampa 7 e poi ancora 7!
aaa
07/10/10 9:45
etrofakus
Le variabili associate a tipi primitivi sono passate a un metodo come valore.
Java tratta le variabili collegati ad oggetti come riferimento agli stessi, quindi gli oggetti sono passati ai metodi per riferimento.
aaa