Esempi presi da here.
codice principale:
#include <stdio.h>
int a;
int main() {
a = 3;
f(4, &a);
printf("%d\n", a);
return 0;
}
chiamata per valore:.
f(int x, int &y){
// x will be 3 as passed argument
x += a;
// now a is added to x so x will be 6
// but now nothing is done with x anymore
a += 2*y;
// a is still 3 so the result is 11
}
valore è passato in e non ha alcun effetto sul valore della variabile passata in
Chiamata per riferimento:
f(int x, int &y){
// x will be 3 as passed argument
x += a;
// now a is added to x so x will be 6
// but because & is used x is the same as a
// meaning if you change x it will change a
a += 2*y;
// a is now 6 so the result is 14
}
Il riferimento è passato. Effettivamente la variabile nella funzione è uguale a quella esterna.
chiamata con copia/Restore:
int a;
void unsafe(int x) {
x= 2; //a is still 1
a= 0; //a is now 0
}//function ends so the value of x is now stored in a -> value of a is now 2
int main() {
a= 1;
unsafe(a); //when this ends the value of a will be 2
printf("%d\n", a); //prints 2
}
valore viene passato e non ha alcun effetto sul valore della variabile passata fino alla fine della funzione, a questo punto il valore finale del la variabile di funzione è memorizzata nella variabile passata.
La differenza fondamentale tra chiamata per riferimento e copia/ripristino è che le modifiche apportate alla variabile funzione non verranno visualizzate nella variabile passata fino a dopo la fine della funzione mentre la chiamata con le modifiche di riferimento verrà visualizzata immediatamente.
Sebbene sia stato in grado di accettare la tua risposta, ho dovuto aspettare qualche ora in più per poter assegnare la taglia. Grazie per la tua grande risposta e naturalmente la taglia è tua! – mort
Ah, non lo sapevo del sistema di taglie. Buono a sapersi! – mydogisbox