单链表作为形参时,&与*的区别

&和*的大致比较

int a=10; int *b=&a; (设a的地址是3000)

a=10,&a=3000;b=3000;*b=10;

&取地址运算符。目的是值的引用,即实参和形参一样,对形参进行修改就会影响到实参;

*指针运算符。目的是地址的传递,传递后实参,形参指向同一地址;

正常数值当作形参传入函数时

                        

两图做对比,图一中形参a,b和图二中*a,*b类似,都几乎等于实参,所以改变传入的值就会影响实参。

因此都能交换a和b的值。

将链表头结点作为形参传入函数时

下面两张图分别两种方式穿参,第一张图中无遍历链表,第二张图片有

修改地方:第一张的void CreateList(LNode* head, int n)改为了void CreateList(LNode* &head, int n)

图一是值传递,图二为引用传递。

为什么第二张不能正常运行呢?

两张图从CreatrList()函数代码分析来看,两个形参head最后都指向了链表的尾节点。

但是图一依旧能够使用实参head进行遍历,而图二却不行。如下图

设刚传入值时实参head和形参head地址都是A。

经过函数后:图一的形参到了F处,但是图一的实参还是在A处(还处于头结点处);

                      图二的形参也到了F处,但是图二的实参也随形参改变到了F处(尾结点);

因此遍历的时候图二情况实参head已经不是头结点了。

所以若要用引用传递的方式传参,需要在函数中新定义一个结点来代替头结点head,防止由于形参head改变而导致了实参head的改变。此时实参形参一样。

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大学生毕设

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值