Prova a guardare questo commentato:
codice:
#include<stdio.h>
int funz (int a, int *b, int *c)
{
*b=*c;//il b nel main viene modificato col valore del c nel main
b=&a;//il puntatore punterà ad a, che non è a del main visto che è
//per valore
*c=*b;//il c nel main conterrà 1, dato che b ora punta ad un 1
a=*c;//a nel parametro avrà il valore che ha la cella puntata da c
return a;//ritorna quindi 1
}
main()
{ int a=1, b= 2, c=3;
int d;
d= funz (a, &b, &c);//viene copiato il valore di a e passato
printf("\% d %d %d %d\n",a, b, c, d);
}
Questa parte:
fa in modo che le modifiche su *b non ricadano sul b nel main, ma sul parametro che contiene la copia di a passato per valore.