C语言中利用Swap函数交换变量a,b

C语言中利用Swap函数交换变量a,b

常见错误写法
error1

void Sawp_error1(int a,int b)
{
	int tmp;
	tmp=a;
	a=b;
	b=tmp;
}
int main()
{
	int a=10;
	int b=20;
	Sawp_error1(a,b);
	printf("%d %d\n",a,b);
	return 0;
}

PS
局部变量:定义在函数内部的变量只能在函数内部使用。
上面代码里在main函数中定义的a,b与Swap函数中a,b只是同名,只在Swap函数中交换a与b的值而不影响main函数中的a与b的值。

error2

void Sawp_error2(int *p1,int *p2)
{
    int *tmp;
	tmp=p1;//将a的地址赋值给tmp
	p1=p2;
	p2=tmp;
}
int main()
{
	int a=10;
	int b=20;
	Sawp_error2(&a,&b);
	printf("%d %d\n",a,b);
	return 0;
}

PS
在上面代码中Swap函数虽然使用指针,但仅仅修改的只是指针,交换a和b的地址,对于main函数中a和b的值并未交换。

error3

void Sawp_error3(int *p1,int *p2)
{
    int *tmp=*p1;//野指针
	*p1=*p2;
	*p2=*tmp;
}
int main()
{
	int a=10;
	int b=20;
	Sawp_error3(&a,&b);
	printf("%d %d\n",a,b);
	return 0;
}

PS
Swap函数中出现野指针,不能访问的指针,出现程序崩溃。
野指针(悬挂指针):没有访问权限的指针,这个指针有可能存在也有可能不存在,但是你不能访问。(野指针不好判断)
1、地址不存在(例如电话号码少一位)。
2、地址存在,但是不能访问(例如电话号码写成别人)。
3、地址之前可以访问,但现在不可以(更换电话号码)。

正确写法

void Sawp(int *p1,int *p2)
{
    int tmp;
	tmp=*p1;//tmp=a
	*p1=*p2;//a=b
	*p2=tmp;//b=tmp
}
int main()
{
	int a=10;
	int b=20;
	Sawp(&a,&b);
	printf("%d %d\n",a,b);
	return 0;
}

结论
一个函数(父函数)调用另一个函数(子函数),想通过子函数修改父函数的数据,必须传指针,子函数内部解引用。也就是子函数的改变要想影响父函数的数据必须传指针和解引用。
error1中既没有指针也没有解引用,error2中只是传指针但在Swap函数中没有使用解引用 error3中传了野指针导致程序崩溃。

  • 44
    点赞
  • 115
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值