关于线性链表的初始化问题

typedef struct LNode{
int data;
struct LNode *next;
}LinkList;

InitList(LinkList *&L)
{
L=(LinkList *)malloc(sizeof(LinkList));
L->next=NULL;
}
main()
{
LinkList *L;
InitList(L);
}
请问初始化函数的形参L前为什么要加地址符&?去掉为什么会出错?

那个不是取地址,是参考引用吧 ,可以在函数内部改变输入变量的值,函数执行完成后值被修改