对于初步学习C语言的同学,总是对swap会用到指针类型有点困惑,带着困惑去学习下一部分内容是很困难的。只会让我们一知半解 不懂装懂。
对于swap就是交换,一般来说我们写交换就直接像把酱油导入醋瓶子里,把醋导入酱油瓶子里。
所以我们一定会有一个空瓶来城防酱油和醋的空间
空瓶= 酱油;//这一步酱油全部导出来了,酱油瓶空了
酱油 = 醋;//酱油瓶空了,我们就把醋导入到酱油瓶里面
醋 = 空瓶(酱油);//经过上一步操作,醋瓶空了,那我们现在只需将空瓶中的液体倒入醋瓶就可以 完成swap了
根除上述内容我们用C语言写一下
![](https://i-blog.csdnimg.cn/blog_migrate/bd42d78b444f56414eb092aa3c201051.png)
因为我们不需要输出什么东西,只需要把这两个位置给换一下就行,所以我们使用void
又因为用了void,就不用return
要return也可以 单独写一个return
ok
我们开开心心的创建了这个函数 我们按住CTRL+F5进行我们激动的运行代码
![](https://i-blog.csdnimg.cn/blog_migrate/fe0680b47a5185c7516257cb8686e54b.png)
可惜现实给我们一碰冷水,让我的代码梦在swap这个小小的垃圾函数面前,碎的一片一片的。
收拾心情,进行我们的调试
![](https://i-blog.csdnimg.cn/blog_migrate/1cdf283220c9774bdc1aca761777602c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2615e1fded899d6502cdbadf87a90397.png)
我们可以看到 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*
现在的空瓶还是一个空瓶,但是现在的酱油瓶已经不是原来的酱油瓶了。
可以这样理解:
我残废了,已经干不了换来换去的工作了,我需要找一个人干,但是这个人不能随便搞两个酱油瓶醋瓶就糊弄我过去了,有两个条件这个酱油瓶和醋瓶一定是我家里的酱油瓶和醋瓶,不能在我家里面搞 我闻不得这个味道。
那他只能闹我家里来取这两个酱油瓶,然后在其他地方给他搞定,
这个就是地址 这个就是函数
![](https://i-blog.csdnimg.cn/blog_migrate/90f1ad0059452e455c900a38c268db22.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4b4542788b1cf4887816a37da0345abf.png)
我们给swap2的这个参数是&a &b
所以*x *y其实就是等于a b
在swap2里面搞的swap就等于在main还是里面的swap
一定要加&的哦,远程是一个关键字
因为远程所以我们要用函数,不能再主函数里面换酱油
又因为远程所以我们检测的不到位,他换的酱油其实不是我家里的酱油,虽说是换了但是没有达到我的要求
因为他不知道我家的地址 所以我得给他提供 &a &b
嗯就是这样
如果有需要了解形参和实参的可以看我的其他文章