自定义一个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;
}

运行结果正确,如下:

关于自定义函数实现两个数的交换中需要注意的问题_指针变量_02