建立空单链表的二级指针寓意何在

我复习软件技术基础的单链表时,发现一个很费解的地方:
建立一个空的单链表的函数如下所示:

 void initiatesl(node **h) {
 *h = (node *)malloc(sizeof(node));
 (*h)->next = NULL;

我想问的是,为什么要用二级指针**h,用*h来表达不可以吗?

因为调用该函数会传入指针的地址。

node *h = NULL;
initiatesl(&h);

if(h == NULL)
{
/* 创建失败 /
}
else
{
/
创建成功 */
}

**h表示指针的指针。内侧的指针指向链表,用来初始化,外侧的指向链表指针,这样才可以把h作为参数传给主程序。
当然,除了用node **h,也可以用node *& h

http://wenku.baidu.com/link?url=a8I6B_zX4AP2M5vivS5XuTuNh9SZNBHzvrXUPQ_1L9UT74NLZ9LzxRrwhIG5I5CiM3Lc7mjgZ4cvLQuhNu-wzqgJwKeeXYkhf6gbxDFBXxu

    void main()
{
    node *head;
    initiatesl(&head);
    ...
}

在main()中定义的head,是指针变量,要想在initiatesl函数对head赋值,必须将head地址传过去。
就和普通变量int a;要想在其他函数改变a的值,就要把地址传过去一样。