例如:
void DeleteLastNode(NodeType **L)
Run Code Online (Sandbox Code Playgroud)
如果**L代表变量L的地址,那么它是否可以用&L代替?另外,如果我使用*L或只是L,我是否能够改变L'的内容?如果是这样,使用*L和L的区别是什么,如果L是指向它的指针呢?我是否只能通过发送L并在实际方法中使用*L来查看它的内容?
我想我的指针仍然不太好.
据我所知,一个星号表示C中的普通指针.例如,您可以分配内存并使指针指向新分配的区域.您还可以指向堆栈中的变量,如:
int x = 10;
int *p = &x;
Run Code Online (Sandbox Code Playgroud)
但是在某些情况下,您希望将指针传递给函数,并使该函数能够将指针更改为指向另一个地址.现在我们不是在谈论通过指针改变变量的内容,也不是通过它指向的内存来改变变量的内容,但是文学会改变指针信息(这是一个mem.地址)来指向另一个地方.在这种情况下,我们使用指向由双星号表示的指针的指针.
int x, y;
int *p;
int **pp;
pp = &p; //pp points to pointer p
*pp = &x; //pp changes pointer p to point to variable x
*p = 10; //p (now points to x) assigns value 10 to x
*pp = &y; //pp changes pointer p again assigning the address of y
*p = 20; //p assigns 20 to y;
**pp = 25;// that's tricky, the first * give access to the address pointed by p (&y) the second changes the content of that address to 25. so now y ends with 25
Run Code Online (Sandbox Code Playgroud)
最后x = 10,y = 25
现在特别针对您的情况,该函数调用看起来像一个将从链表中删除节点的函数.这是有道理的,因为你有一个指向列表头部的外部指针.删除最后一个元素时,函数必须能够将指针从当前地址更改为null.您可以使用全局指针或在您的情况下传递头指针的地址.