swap 为什么要用到 &

文章通过比喻解释了C语言中swap函数的工作原理,强调了指针在交换变量值时的重要性。作者指出,由于函数内部无法直接影响外部变量,因此需要通过指针传递变量的地址来实现交换。在swap函数中添加地址符&使得函数能操作实际变量,而不是副本。此外,文章还讨论了形参和实参的概念。
摘要由CSDN通过智能技术生成

对于初步学习C语言的同学,总是对swap会用到指针类型有点困惑,带着困惑去学习下一部分内容是很困难的。只会让我们一知半解 不懂装懂。

  • 对于swap就是交换,一般来说我们写交换就直接像把酱油导入醋瓶子里,把醋导入酱油瓶子里。

所以我们一定会有一个空瓶来城防酱油和醋的空间

空瓶= 酱油;//这一步酱油全部导出来了,酱油瓶空了

酱油 = 醋;//酱油瓶空了,我们就把醋导入到酱油瓶里面

醋 = 空瓶(酱油);//经过上一步操作,醋瓶空了,那我们现在只需将空瓶中的液体倒入醋瓶就可以 完成swap了

  • 根除上述内容我们用C语言写一下

因为我们不需要输出什么东西,只需要把这两个位置给换一下就行,所以我们使用void

又因为用了void,就不用return

要return也可以 单独写一个return

ok

我们开开心心的创建了这个函数 我们按住CTRL+F5进行我们激动的运行代码

可惜现实给我们一碰冷水,让我的代码梦在swap这个小小的垃圾函数面前,碎的一片一片的。

收拾心情,进行我们的调试

我们可以看到 a b x y分别由四个不同的地址。

也就是说x 和 y 与a和b是根本没有联系的两个数字,那我们在swap1里面写的东西,也不会对外面的a b产生任何影响。

要让x y远程控制a和b的位置关系,就需要用到我们的指针的知识。

  • int m;

int * pa;

pa = &m;

*pa = n;

这样通过pa这个指针可以把m换成n。因为pa这个指针指向的是m的地址,然后用* 可以指向m这个变量, *pa = n; 就把n赋值给m了

我们在swap2中也是用到了这个

这次的实参就不仅仅是a,b了,而是要a b的地址,让形参好访问这个变量。又因为地址是一个指针所以需要重新定义形参类型 整数型指针 int*

现在的空瓶还是一个空瓶,但是现在的酱油瓶已经不是原来的酱油瓶了。

可以这样理解:

我残废了,已经干不了换来换去的工作了,我需要找一个人干,但是这个人不能随便搞两个酱油瓶醋瓶就糊弄我过去了,有两个条件这个酱油瓶和醋瓶一定是我家里的酱油瓶和醋瓶,不能在我家里面搞 我闻不得这个味道。

那他只能闹我家里来取这两个酱油瓶,然后在其他地方给他搞定,

这个就是地址 这个就是函数

我们给swap2的这个参数是&a &b

所以*x *y其实就是等于a b

在swap2里面搞的swap就等于在main还是里面的swap

一定要加&的哦,远程是一个关键字

因为远程所以我们要用函数,不能再主函数里面换酱油

又因为远程所以我们检测的不到位,他换的酱油其实不是我家里的酱油,虽说是换了但是没有达到我的要求

因为他不知道我家的地址 所以我得给他提供 &a &b

嗯就是这样

如果有需要了解形参和实参的可以看我的其他文章

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值