首页 理论教育 指针传递及交换功能详解

指针传递及交换功能详解

时间:2023-08-20 理论教育 版权反馈
【摘要】:指针传递本质上和按值传递一样,只是将一般的对象换成了指针。另一个使用指针传递的情形是我们想要在函数中改变实参。我们先来看一个通过按值传递实现两个数字交换的示例:动手写7.2.2运行结果如图7.2.2所示:图7.2.2按值传递实现swap我们可以看到,在swap()函数的最后,形参a和b是成功交换的。要注意指针传参本质上也是按值传递,只不过我们拷贝的不是整个文件,而是电子版文件的地址。

指针传递及交换功能详解

指针传递本质上和按值传递一样,只是将一般的对象换成了指针。由于自定义对象的大小可能会很大(如上一小节的string),赋值拷贝比较费时间,在这种情况下使用指针是非常高效的,因为它只需要传递地址大小的数据。不仅对于参数来说,而且在任何情况下我们都应该尽量使用自定义对象的指针。

另一个使用指针传递的情形是我们想要在函数中改变实参。我们先来看一个通过按值传递实现两个数字交换的示例:

动手写7.2.2

运行结果如图7.2.2所示:

图7.2.2 按值传递实现swap

我们可以看到,在swap()函数的最后,形参a和b是成功交换的。那么为什么出了函数以后,a又变回3了呢?我们之前说过,形参本质上是作用域仅限于函数内部的局部变量,实参只是把值赋值或者说拷贝给形参,出了函数作用域后形参消失,而实参还是原来的样子。之前我们用文件和信封的例子来解释参数传递,其实例子中的每个员工都是把文件先复制了一份后再放进信封的,复制后的文件会被修改,然而原件却保持不变。这就是为什么main()函数中的a和b经过swap()函数之后并没有改变值。接下来我们再来看看使用指针实现数字交换的示例:(www.xing528.com)

动手写7.2.3

运行结果如图7.2.3所示:

图7.2.3 指针传递实现swap

这一次在swap结束之后,a和b也保留了交换后的结果,这是因为我们传递了地址,在函数中通过解引用操作将形参的地址修改成与实参的地址一样。还是拿信封和文件的例子来说明,这次员工们放入信封的是一个小纸条,上面写着电子版文件的网盘分享链接,这样在信封送给编辑者之后,工作人员通过链接得到并进行修改的文件就是原件了。

要注意指针传参本质上也是按值传递,只不过我们拷贝的不是整个文件,而是电子版文件的地址。这其中的区别希望读者可以反复消化理解。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈