教科书以这种方式描述插入算法,我的问题是,它不能通过第二个函数来完成,如下所示,它不包括指向指针的指针,而是使用*l和l.
void insert (list **l, int d)
{
list *p;
p = malloc(sizeof(list));
p.data = x;
p.next = *l;
*l = p;
}
void insert1 (list *l, int d){
list *p;
p = malloc(sizeof(list));
p.data = x;
p.next = l;
l = p;
}
Run Code Online (Sandbox Code Playgroud)
一切都是用C中的值传递的.这包括你的指针.所以,当你l = p;在函数结束时说,这对调用者没有影响insert1().你只是修改一个局部变量insert1()(碰巧拿着一个指针).
但是,当您*l = p;在结尾处说时insert(),您正在编写指向由调用者控制的内存位置的指针.调用者通常会执行与此类似的操作:
list* myList = ...;
insert(&myList, ...);
Run Code Online (Sandbox Code Playgroud)
这样,*l = p;直接修改myList调用者的值,允许调用者实际看到效果.