最近学数据结构课的时候,好多同学在问这个初始化函数为什么要两个*
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 *类型,都是多加一个*
记录学习经历~