В функцию можно передавать не только значения переменных, но и их адреса. В этом случае в вызываемой функции можно изменять значение локальных переменных, определенных в вызывающей функции.
void swap(int*,int*);
void main(void){
int x=5, y=10;
printf ("Прервичные значения х=%d, y=%d\n",x, y);
swap (&x, &y);
printf ("Новые значения х=%d, y=%d\n", x, y);
}
void swap (int*v, int*z){
int u;
u=*v;
*v=*z; //x=y
*z=u;
}
Мы передали в функцию адреса переменных, поэтому при выходе х, у имееют новые значения. При передаче значений этого не происходило.
Вызов swap (x, y); swap (&x, &y);
Определение функции swap (int v, int z); swap (int*v, int*z);
Переменные х, y являются локальными в функции main, но мы, таким образом, можем на них воздействовать в другой функции.