自定义一个Swap函数实现a、b值的交换,若代码如下:
#include<stdio.h>
void Swap( int x,int y)
{
int t;
t=x;
x=y;
y=t;
}
int main()
{
int a,b;
scanf("%d %d",&a,&b);
Swap(a,b);
printf("%d %d",a,b);
return 0;
}
运行结果如下:
我们会发现a、b的值并未发生交换,为什么呢?
原因是Swap函数中定义的x、y的内存地址与a、b的不同,通过中间变量t只是将x、y的值交换了,a、b的值并未发生变化;
我们可以使用指针变量来进行两值的交换,先来复习一下指针变量的基本含义:
int a=10;//为变量a开辟一块地址空间,存放10
int *p=&a;//为指针变量p开辟一块地址空间,存放变量a的地址
*p=20;//*是解引用操作符,*p=20指将通过a的地址找到a,并将10替换成20
printf("%d",a);//此时a的值为20
指针变量指向的是地址,通过已知地址我们可以改变其存放的内容,由此修改程序:
#include<stdio.h>
void Swap( int *pa,int *pb)
{
int t;
t=*pa;
*pa=*pb;
*pb=t;
}
int main()
{
int a,b;
scanf("%d %d",&a,&b);
Swap(&a,&b);
printf("%d %d",a,b);
return 0;
}
运行结果正确,如下: