一个简单的swap交换函数

基础比我想得重要,一不注意就出错了,而且真的不好找……今天就犯了一大打错,写交换函数的时候写错了,沉重的打击了我幼小的心灵……哎,是这样的。

//这是一种错误的写法,形参传进来的是实参的地址,temp如果被赋值为a的地址
//然后a指向的内存中的值是b指向的内存中的值,这一步是半成功的,因为,同时temp与a指向的内存相同,*temp和*b的值一样……
//a原本指向的内存中的值被更改的,不知道去哪里了,运行结果会发现,本想着交换的两个值,变得一样。
void swap(int *a, int *b)
{
	int *temp = a;
	*a = *b;
	*b = *temp;
}

//这也是一种错误的写法,在这里temp里面是a的地址,a被赋予b的地址,然后b又被赋予a的地址
//然后函数结束,a,b,temp被回收……然后就是跟实参毛线关系也没有……
void swap(int *a, int *b)
{
	int *temp = a;
	a = b;
	b = temp;
}

//这才是正确的写法,引入地址后,解引用,直接对这个内存中存的内容做改动
void swap(int *a, int *b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
}

//和上面类似的还有这个,交换两个指针,意义是相同的,传进来两个指针的地址,
//对这个地址做解引用后,对指针本身做改动。
//这也是正确的写法
void swap1(int **a, int **b)
{
	int *temp = *a;
	*a = *b;
	*b = temp;
}

用图来解释一下,感觉画的没什么用呀。

 

大致意思和代码中说的差不多,看图更明显,传进来的地址,是不能直接对该地址做改动的,如果需要改动,得通过地址的地址。我们的目的是,通过传进来的地址,做解引用,这样就可以改动内存里面的数据了。

当然更方便的方式就是采用引用,但作为显得有点low,是吧?

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值