二重指针的使用

1、为什么会在传参的时候用二重指针呢?

要想弄明白这个问题,先搞清楚为什么传参的时候用指针?

我想很多人都知道直接传值是不会改变实参的值的,只能改变形参的值。所以我们把参数设定为地址,即、传参时用指针,我们就可以改变实参的值。

2、那么考虑一下另外一种情况,我们如果想要改变的实参是一个地址呢?那我们直接把地址值作为形参传进去,函数是不会改变实参(地址值)的。那我们想要改变这个地址值,要怎么办呢?

照葫芦画瓢呗!我们知道指针(地址)也是变量,它也存在一个地址中,所以我们把存指针的地址(二重指针)作为形参传进去,就可以改变指针值了。

3、为什么需要传二重指针呢?

当然是为了改变地址值啦,试想一下,某种情况下,我们要动态申请5个字节的内存

        char* p = (char*)malloc(5);

可是过了一段时间发现5个字节不够用了啊。想扩大到10个字节,那怎么办呢?有的人说再申请5个呗。可是我想用一个变量对这10个字节的地址进行访问。。

所以我们可以封装一个函数,用来扩大字节数。

那么这个函数怎么写呢?我想这个函数的逻辑结构是不是应该是这样的:

        1、在函数体内申请10个字节, char* q = (char*)malloc(10);

        2、把p,这5个字节里面的内容拷贝到q里面,再把q的地址返回去

那么假如我们利用函数参量进行返回(不利用函数类型返回),那么我们需要把传进来的p地址换成q的地址。那么怎么改变实参呢?不就正好是把存p的地址传进去么?!

4、二重指针在单链表中的应用

        1、节点定义

              

        2、创建头指针

                

        3、创建单链表

        在主函数中创建头指针List,但是是指向NULL,我们希望它指向头结点,在单链表构建函数中,我们malloc一个头结点,并把List的指向改为指向malloc的地址。这样实参就被我们改变了,在主函数中就可以用这个地址进行访问了。

        当然你也可以把返回值void改为Linklist,这样利用返回值去指向头结点也可以。

 

 

 

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值