前言
- 在初识c语言阶段,我们如何使用自定义函数来实现两个数的swap,通过简单的案例,能够进一步加深我们对于函数参数的理解和使用
错误示范:
当我们在刚开始接触的c语言时,我们想要交换两个数的值,可能会有如下情况
当我们自信满满的以为实现了我们想要的效果,一运行却发现a和b的值根本没有发生改变
这是为什么呢?
这就是涉及到在c语言中函数的运行过程。实际上在我们将a,b传入到函数的过程中,实际上仅仅传入了a,b的值,而不是涉及a,b本身,也就是我们所说的传值调用,只是把a,b的值给了你,存储在临时的变量里,并不会影响a,b原本的值。
重点来了:
因此当我们想要通过函数去交换两个数的值的时候,我们应该通过变量的地址来完成操作,即我们所说的传址调用,因此我们的函数的参数应该改为指针变量用来接收a,b的地址,通过地址来实现对a,b值的交换。因此将代码做以下修改:
为了方便理解,我们将参数名改为了pa,pb,以此来区别在主函数中的a,b。可以看到我们将函数原来的参数类型由 int 换为了int* ,因此我们可以通过 *pa来间接修改a的值,从而完成交换。需要注意的是,因为我们函数所接受的参数 为int *类型,所以我们传入的应该是一个地址,因此我们需要在a和b前加上取地址符号&,传入符合函数的参数。
总结
通过swap函数的实现,我们可以简单的区分传值调用和传址调用,当我们使用的是传值调用的时候,函数的会创建临时变量去接收,新开辟了一片区域来存储数值,相当于拷贝了一份数值,对拷贝的值进行处理,自然不会影响到原本的数据。而当我们使用传址调用时,就可以通过地址准将地找到原本数据存储的位置从而进行修改。