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