前言
以单链表作示范,对比传递指针作参数与传递引用作参数的不同之处。
传递指针作参数
测试代码图示

说明:我先在主函数创建了一个节点存放值111,然后在CreateLink()CreateLink()CreateLink()函数中创建另一个值为222的节点并让头指针指向此节点。此时链表有两个单元,值1−>21->21−>2
1.未改动代码:
如图黑色部分,我最初认为传递指针作参数,即可让实参中的指针随着函数中的操作而变化。然而如上所示的代码显示的结果却是:111 222
既然在CreateLink()CreateLink()CreateLink()函数改变了头指针的指向,为什么在从头结点开始遍历时,结果依然不变呢?
2.改动代码后:
对代码作如图所示的改变,此时再执行ShowLink()ShowLink()ShowLink()函数,发现达到了想要的结果——222
分析:
被调函数的参数均作为局部变量
对于传递指针来说,指针传递的本质是值传递,也就是说,被调函数在栈中开辟了一块空间作为该实参值的副本。被调函数对形式参数的任何操作都是作为局部变量进行的,不会影响主调函数的实参变量的值也就是说形参指针变了,实参指针不会变。实参的指针还是指向原来的位置。
传递引用作参数

说明:如下修改后也可得到想要的结果——222
分析:
引用传递时,被调函数的参数同样作为局部变量。但是此时栈空间中存放的是由主调函数传进来的实参的地址,被调函数对形参的任何处理都会变成 间接寻址 后的操作。因此可以达到修改主调函数参数地址的目的。

本文通过单链表实例,深入探讨了在C/C++中使用指针和引用作为函数参数的区别。详细解释了为何传递指针仅复制值,而传递引用则能直接修改原数据,为读者解开参数传递的疑惑。
947





