前言

单链表作示范,对比传递指针作参数传递引用作参数的不同之处。


传递指针作参数

测试代码图示
关于传递指针与传递引用作参数的测试


说明:我先在主函数创建了一个节点存放值11,然后在CreateLink()CreateLink()函数中创建另一个值为22的节点并让头指针指向此节点。此时链表有两个单元,值1>21->2

1.未改动代码:
如图黑色部分,我最初认为传递指针作参数,即可让实参中的指针随着函数中的操作而变化。然而如上所示的代码显示的结果却是:11 22
既然在CreateLink()CreateLink()函数改变了头指针的指向,为什么在从头结点开始遍历时,结果依然不变呢?

2.改动代码后:
对代码作如图所示的改变,此时再执行ShowLink()ShowLink()函数,发现达到了想要的结果——22

分析:
被调函数的参数均作为局部变量
对于传递指针来说,指针传递的本质是值传递,也就是说,被调函数在栈中开辟了一块空间作为该实参值的副本。被调函数对形式参数的任何操作都是作为局部变量进行的,不会影响主调函数的实参变量的值也就是说形参指针变了,实参指针不会变。实参的指针还是指向原来的位置。


传递引用作参数

关于传递指针与传递引用作参数的测试


说明:如下修改后也可得到想要的结果——22

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

相关文章: