指针变量作为函数参数
我们说过,函数参数可以是变量,那么既然指针变量也是变量的一种,能否作为函数的参数呢?答案是肯定的!而指针变量作为函数参数的主要作用是,将变量地址传送到函数
中。
从例子引入
我们通过两个使用指针变量作为函数参数的例子,来引入我们今天的内容。
问题
输入两个数,返回其中的较大者,设计一个自定义函数进行比较,要求使用指针变量作为函数参数。
解答
1 |
|
因为 a_pointer 这个指针变量存放着变量 a 的内存地址,所以我们传递给函数后,形参里面的*pinter_1就是变量 a。
我们把上面的代码修改一下,不改变变量名的情况下,输出最大值:
1 |
|
我们观察到 a 和 b 的变量名没有改变,但却能够根据数的大小输出正确的结果,这里我们就要好好理一理这个思路了。
从指针角度来看变量包括3部分:
- 变量名
- 变量名指向的数据
- 变量名指向的数据的地址
上面的例子中,我们知道主调函数只能向被调函数单向传递数据到形参,形参发生改变,函数结束后形参就释放了,不能影响到实参,但是在这里,我们形参
传递过去的是地址
,形参通过地址找到真是的数据
,然后改变这些数据,这些操作是真是有效的。所以,我们在变量名不变的情况下,将变量名指向的数据对调了
,所以变量名还是那个变量名,地址还是那个地址,但是里面的货
被我们调包了。这就是指针的灵活性所在,变量名、地址、指向的数据三者都可以进行改变,用来达到我们预期的目的。
用例子说明
如何调用一个 void 函数,即函数不返回任何值的前提下,改变两个变量的值。
1 |
|
上面解答的精髓就是,我们通过一个自定义函数,接收到了需要改变变量的地址,然后通过地址找到了变量指向的数据,直接修改了数据内容,达到了变量和地址不变,内容交换的效果。
这也是指针作为函数参数最主要的通途。
尾巴
这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。