更新时间2018-03-06 21:58:32
#include<stdio.h>
void swap(int *a,int *b)
{int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
int main()
{int x;
int y;
int *px;
int *py;
scanf("%d",&x);
scanf("%d",&y);
px=&x;
py=&y;
swap(px,py);
printf("%d",x);
printf("%d",y);
return 0;
}
c语言中形参与实参的关系是:形参是实参的值副本。无论参数的类型是什么,传递到子函数中的形参只是实参的值。所以,在改变形参变量自身的值时,是与实参无关的。换句话说,形参的改变不会影响到实参。
但,如果参数类型是指针类型,则可以通过对指针变量所指向的地址中的数据进行修改,达到改变实参地址中的数据目的。
因此,使用SWAP函数进行数据交换时,必须保证两点:
参数必须是指针类型,指向待交换的数据
交换时,必须交换地址中的数据,而不是交换地址本身。
参考代码:
123456789101112131415161718192021//错误的交换代码1void swap1( int a, int b ) //参数不是待交换数据的指针{ int t=a; a=b; b=t;}//错误的交换代码2void swap2( int *a, int *b ) { int *t=a;//交换形参变量本身 a=b; b=t;}//正确的交换代码void swap( int *a, int *b ) { int t=*a;//交换形参变量地址中的数据,指针变量不变 *a=*b; *b=t;}是这样的,swap函数有两个参数对吧,这两个参数是两个地址。
在你调用swap(px,py)的时候把整型变量x和y的地址作为了参数。
再来看swap的作用。
tmp=*a;
*a=*b;
*b=tmp;
星号a就是把a所指向地方存的值取出来的意思,取出来之后和b所指向的内容存的值交换了。
所以swap函数的作用是将参数*a,*b所指向的内容交换(此时a是x的地址,b是y的地址),自然也就是把两个整型变量x,y交换了。哦~亲~