codice:
#include <iostream>
using namespace std;
void func(int a, int &b, int *c, int *d)
{
a++;
b++;
cout << "A:" << a << " B:" << b << " C:" << *c << " D:" << *d << " (durante)\n";
}
int main()
{
int a=1, b=4, *c, *d;
c=&a; // 'c' punta ad 'a'
d=&b; // 'd' punta a 'b'
cout << "A:" << a << " B:" << b << " C:" << *c << " D:" << *d << " (prima)\n";
func(a, b, c, d);
cout << "A:" << a << " B:" << b << " C:" << *c << " D:" << *d << " (dopo)\n";
system("PAUSE");
return 0;
}
passaggio di un valore ad una copia di 'a'
passaggio di un riferimento, quindi dell'indirizzo di memoria in cui risiede 'b'
morale della favola...
'a' della funzione main() ed
'a' della funzione func() hanno due indirizzi di memoria differenti.
mentre
'b'...main() e
'b'...func() hanno lo stesso indirizzo di memoria.
conclusione:
il valore di 'a' cambia soltanto in func()
mentre il valore di 'b' cambia in entrambe le funzioni.
'c' punta all'indirizzo di memoria di 'a' in main()
e non di 'a' in func()
mentre
'd' punta all'indirizzo di 'b' in main()
ma visto che 'b' (a differenza di 'a')
la passo alla funzione func() come riferimento di memoria,
'd' punta anche a 'b' in func()
"STESSO INDIRIZZO" quindi stessa variabile.
CMQ per capire meglio,
prova ad eseguire il programma e osserva cosa cambia.