前言
以单链表作示范,对比传递指针作参数与传递引用作参数的不同之处。
传递指针作参数
测试代码图示
说明:我先在主函数创建了一个节点存放值,然后在函数中创建另一个值为的节点并让头指针指向此节点。此时链表有两个单元,值
1.未改动代码:
如图黑色部分,我最初认为传递指针作参数,即可让实参中的指针随着函数中的操作而变化。然而如上所示的代码显示的结果却是:
既然在函数改变了头指针的指向,为什么在从头结点开始遍历时,结果依然不变呢?
2.改动代码后:
对代码作如图所示的改变,此时再执行函数,发现达到了想要的结果——
分析:
被调函数的参数均作为局部变量
对于传递指针来说,指针传递的本质是值传递,也就是说,被调函数在栈中开辟了一块空间作为该实参值的副本。被调函数对形式参数的任何操作都是作为局部变量进行的,不会影响主调函数的实参变量的值也就是说形参指针变了,实参指针不会变。实参的指针还是指向原来的位置。
传递引用作参数
说明:如下修改后也可得到想要的结果——
分析:
引用传递时,被调函数的参数同样作为局部变量。但是此时栈空间中存放的是由主调函数传进来的实参的地址,被调函数对形参的任何处理都会变成 间接寻址 后的操作。因此可以达到修改主调函数参数地址的目的。