#include<stdio.h>
void swap_1(int a,int b) //形参(局部变量,只能在本函数中使用) //error
{
int tmp;
tmp=a;
a=b;
b=tmp;
}
void swap_2(int *p,int *q)//error
{
int *tmp;
tmp=p;
p=q;
q=tmp;
}
void swap_3(int *p,int *q)
{
int tmp;
tmp=*p;
*p=*q;
*q=tmp;
}
int main()
{
int a=10;
int b=20; //实参
//swap_1(a,b); //形参ab不同于实参ab,该程序只改变了形参a、b的值,跟主函数a、b没有关系
//swap_2(&a,&b);
swap_3(&a,&b);
printf("%d %d",a,b);
return 0;
}
(1)swap_1错误原因:形参ab不同于实参ab,该程序只改变了形参a、b的值,不改变实参ab(主函数a、b没有关系)
(2)swap_2错误原因:静态变量的地址是不变的,因此不能改变ab的地址,
只改变了形参p、q的值,形参的改变不影响ab的值,因为p指向a,q指向b(p=&a p=a),因此要互换p、*q的值。