自己写的一个链表初始化函数,为什么当小弟我初始化出错了

自己写的一个链表初始化函数,为什么当我初始化出错了
int InitList(Event *head)//初始化链表,构造头指针
{
head=(Event *)malloc(sizeof(Event));
if(!head)
return ERROR;
head->next=NULL;
head->NType=-1;
head->OccurTime=-1;
return OK;
}
下面我定义了一个
Event *head;
InitList(head);
运行时候,却显示head没有初始化,为什么呢

------解决方案--------------------
名字一样,可在函数中的head是一个局部变量,在出了函数之后会消失,这样在InitList(head);后对head进行调用,Event *head;值没有变化;
要么传递Event *head 的引用,要么传递一个指向Event *型变量head的指针:int InitList(Event **p_head)
------解决方案--------------------
其实简单的说,在你的InitList函数里面会有一个副本:_head = head;所以你malloc的时候,只是_head分配了内存,而head并未变化
------解决方案--------------------
你在函数InitList(head);中给head重新分配了空间,head值应该都变了

Event *head;
InitList(head);
调用过后的head值并非是InitList()函数中的head值;

一楼的方法可行,你还可以
你可以把head=(Event *)malloc(sizeof(Event));提到InitList()外面试试看
即:
Event *head;
head=(Event *)malloc(sizeof(Event));
InitList(head);
并将InitList()中的那句去掉
------解决方案--------------------
你head没初始化,初始化函数应该返回一个指针给head。
------解决方案--------------------
C是传值调用的,指针在函数中改变指向的地址是没用的,只是改个副本,但是该指向地址的值有效,所以用指针的指针吧
------解决方案--------------------
探讨
其实简单的说,在你的InitList函数里面会有一个副本:_head = head;所以你malloc的时候,只是_head分配了内存,而head并未变化