数据结构 线性表初始化函数为什么要用二级指针

文章讨论了在学习数据结构时,关于链表初始化函数为何使用二级指针的问题。作者指出,`ListInitiate`函数需要对`list1`所存储的地址进行赋值,因此需要传入`list1`的地址,即二级指针`Stu**head`,以便在函数内部对主函数的变量进行修改。这与对基本类型的变量如`intn`进行非局部赋值的情况相似,需要传入`n`的地址。
摘要由CSDN通过智能技术生成

最近学数据结构课的时候,好多同学在问这个初始化函数为什么要两个*

void ListInitiate(Stu** head); //链表初始化,失败会输出“分配内存失败”
ListInitiate(&list1);

上面随手写的函数声明和主函数中的函数调用,可能不太规范,求大佬们喷轻点。

        有些同学认为明明我都是指针,传址那不是肯定能回来主函数吗

但是我们要搞清楚:list1只是装地址的一个变量,对list1而言,地址是它的值,就像int n=1; 1是n的值;

我们要初始化的是list1中装的地址,也就是,我们要在初始化函数中对list1进行“赋值”,要在非主函数中对主函数的变量进行赋值,那就得传址,传谁的地址?当然是list1的地址,也就是 指针的指针,二级指针。

这里可能有些看不懂了,继续举刚刚int n的例子,要在非主函数中对主函数的n进行赋值,那我们得传n的地址过去才能赋值成功,n对应的list1也是如此。举例这边是int *n,是因为n本身是int类型,实例的Stu **head,是因为list1本身是Stu *类型,都是多加一个*

记录学习经历~

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值