一般我知道一个指针存放的是另一个值在计算机内存中的内存地址,例如:
int firstvalue= 5
int * p1;
p1 = &firstvalue; // p1 = address of firstvalue
如果我们在链表中定义如下操作会发生什么? *current=*list
是不是意味着current指向的值等于list指向的值?如果我们定义 ecur=current
又是什么意思?
int function(struct list_t **list){
struct list_t *ecur=NULL;
struct list_t *current=*list;
ecur=current;
}
更新:
*list=remove(*list, param1, param2)
有什么作用?为什么会这样?
remove
是一个返回 list
的修改列表的函数。
更新 2:
为什么我们需要定义一个指向指针的指针才能修改列表? *list
是指向指针的指针吗?
最佳答案
变量 list
是一个指向结构 list_t 的指针。如果我们(仅作为示例)假设该结构位于地址 2000 处,而未命名指针位于地址 1000 处,它将如下所示:
然后您进行了添加两个新变量的初始化。两者都作为指向结构 list_t 的指针。
struct list_t *ecur=NULL;
struct list_t *current=*list;
所以现在图片变成了:
请注意 current
与中间的“some-pointer”具有相同的值,因为它是 *list
被分配给 current
.
然后你有作业:
ecur=current;
这意味着ecur
得到与current
相同的值并给出图片:
Update: What does it do
*list=remove(*list, param1, param2)
?
它改变了图片中间的“some-pointer”的值。例如,如果 remove
函数删除链表中的第一个元素,则需要这样做。
关于c - 链表中指针的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54348021/