在经过函数的学习后,我们了解到函数在实现功能时操作的数据其实是主函数数据的副本,也被称为形参,所以在函数中进行操作并不会修改主函数的值。但是如果想要通过函数来修改主函数的值又要怎么做呢?举个例子,如何用函数使主函数变量的值调换?
对于该题目的分析,首先要在函数中构建中间变量,通过中间变量进行数值调换。如果没有注意到函数修改形参的特点,就有可能出现以下错误。
可以看出这样做并没有修改主函数中值。
为了实现上述功能就必须要使用到C语言中的指针,指针也就是地址,某一变量的指针也就是某一变量的地址。通过对C语言的学习,我们了解到变量在定义时就被赋予了一个空间用于存放数据,这个空间也就是该变量的地址。对指针有了初步的了解后,我们在定义函数时就可以将变量的地址作为参数,通过地址找到这个变量,对其修改。
在这里我们明明用了指针,可还是没有达到我们想要的结果。仔细观察代码,我们发现函数swap2确实进行了数值调换,但仅仅只是调换了地址,实际上并没有对地址的内容产生作用。打个比方,一公司有两个仓库a,b,现需把a中的甲货物与b中的乙货物交换,二上述操作相当于把a,b仓库门牌号交换,但其内部货物甲乙并没有发生改变
上述情况又因为*tmp指针未初始化报错。通过上述几种典型错误后,可以总结出:要想指针发挥其作用,必须要传送指针的值,还要对指针进行解引用操作。这时再要完成上面的目的就简单多了。我们可以将主函数实参的地址传给函数,函数通过实参的地址间接访问实参,然后对实参进行修改。我们首先创建一个中间变量,再对主函数变量的指针进行解引用,达到最总目的。代码如下: