Swap函数的写法及其常见错误示例

Swap函数的写法及其常见错误示例

数据交换在编程过程中十分常见,为方便起见,我们可以编写一个函数Swap,用于两个变量之间的数据交换,需要交换两个变量的值调用函数Swap即可。但在编写Swap函数的过程中,容易出现一些常见错误,下面便给出正确的写法及其常见错误示例。

错误示例1:

void Swap(int a,int b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
}

上面写法的错误点在于没有使用指针,被调用函数(子函数)中的同名变量值无法传递到主调函数(父函数)中;不同函数中的同名变量虽然变量名一样,但他们的地址并不相同,这就导致被调用函数中的两个变量交换了,而主调函数中的变量并未发生交换。该错误类似于定义在for循环里的循环变量i无法传递到当前函数。
类似错误示例:

#include <stdio.h> 
int main()
{
 int i=0;
 for(int i=0;i<2;i++)
 {
  ;
 }
 printf("%d\n",i);
}

错误示例2:

void Swap(int *p1,int *p2)
{
	int *tmp;
	tmp=p1;
	p1=p2;
	p2=tmp; 
}

该写法错误点在于没有出现解引用,虽然两个变量的地址发生了交换,但是他们的数值并未发生交换。假设要交换的变量是a和b,原先指向a的指针是p1,指向b的指针是p2;两个指针交换后指向a的指针是p2,指向b的是p1;就相当于交换了变量a和变量b的地址,a和b的值并没有交换。

错误示例3:

void Swap(int *p1,int *p2)
{
	int *tmp;
	*tmp=*p1;
	*p1=*p2;
	*p2=*tmp; 
}

改写法错误是出现了野指针,即指针*tmp没有初始化,他没有指向的变量,计算机没有访问地址的权限,这个地址可能存在,也可能不存在。就好比定义了一个整型变量a,在没有给a赋值的情况下输出a,也会出现类似的错误报告。该写法可修改为在定义一个整型变量x,把x的地址赋值给tmp即可完成交换。修改后的代码如下:

void Swap(int *p1,int *p2)
{
	int *tmp;
	int x;
	tmp=&x;
	*tmp=*p1;
	*p1=*p2;
	*p2=*tmp; 
}

正确写法示例:

#include <stdio.h>

void Swap(int *p1,int *p2)
{
	int tmp;
	tmp=*p1;
	*p1=*p2;
	*p2=tmp;
}

int main()
{
	int a=10;
	int b=20;
	Swap(&a,&b);
	printf("%d %d\n",a,b); 
	return 0; 
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_200_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值