知道在C中的方法定义中使用的星号数量?

1 c pointers

例如:

void DeleteLastNode(NodeType **L)
Run Code Online (Sandbox Code Playgroud)

如果**L代表变量L的地址,那么它是否可以用&L代替?另外,如果我使用*L或只是L,我是否能够改变L'的内容?如果是这样,使用*L和L的区别是什么,如果L是指向它的指针呢?我是否只能通过发送L并在实际方法中使用*L来查看它的内容?

我想我的指针仍然不太好.

And*_*res 5

据我所知,一个星号表示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.您可以使用全局指针或在您的情况下传递头指针的地址.