两种不同的情况
1.变量值发生了改变
#include <stdio.h>
void f(int *x,int *y)
{
int p;
p=*x;*x=*y;*y=p;
printf("%d %d",*x,*y);
}
int main() {
int a=3,b=5;
f(&a,&b);
printf("\n%d %d\n",a,b);
return 0;
}
输出结果: 5 3 5 3
注1:把传入参数(如题目中的a,b)的地址复制了给一对新的指针变量x,y 用这对指针变量指向该地址所指向的内容
注2:f(&a,&b)而不是f(a,b),是因为f(int *x,int *y)中形参变量x,y是指针型变量,传参传的是地址,必须带&(取地址符)
2.变量值未发生改变
#include <stdio.h>
void f(int *x,int *y)
{
int *p;
p=x;x=y;y=p;
printf("%d %d",*x,*y);
}
int main() {
int a=3,b=5;
f(&a,&b);
printf("\n%d %d\n",a,b);
return 0;
}
输出结果: 5 3 3 5
总结: 使用指针并不代表变量值一定会被改变,要看交换的是不是变量值本身 (内容如有错误,欢迎指正)
|