举个例吧,
假如一个结构:LinkNode
初始化:Initial(LinkNode **p);//这里就是双指针
那么在调用就这样,
LinkNode *p;
Initial(&p);
原理就是,如果你要通过函数来改变某个参数的值,那么就要传该参数的地址进去。
这里p是一个指针,所以要传指针的地址进去,也就是一个指向指针的指针;
初始化函数Initial(LinkNode *(*p));(*p)是指针,*(*p)就是传指针的地址进去了,意思就这样,不知道你听不听得懂。
不管动态还是静态,只要是要通过函数来改变指针类型数据的值,就要用双重指针。
楼上讲得不错
再帮补充一下细节:
这样调用
LinkNode *p = NULL;
Initial(&p);
经过 Initial(&p) 的作用后,p就不再是 NULL 了,而是一个真正可用的链表指针