c - 链表中指针的操作

标签 c pointers linked-list

一般我知道一个指针存放的是另一个值在计算机内存中的内存地址,例如:

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 处,它将如下所示:

enter image description here

然后您进行了添加两个新变量的初始化。两者都作为指向结构 list_t 的指针。

struct list_t *ecur=NULL;
struct list_t *current=*list;

所以现在图片变成了:

enter image description here

请注意 current 与中间的“some-pointer”具有相同的值,因为它是 *list 被分配给 current.

然后你有作业:

ecur=current;

这意味着ecur得到与current相同的值并给出图片:

enter image description here

Update: What does it do *list=remove(*list, param1, param2) ?

它改变了图片中间的“some-pointer”的值。例如,如果 remove 函数删除链表中的第一个元素,则需要这样做。

关于c - 链表中指针的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54348021/

相关文章:

c++ - std::out_of_range 错误?

c - 多叉树的结构 - C

c++ - 带有字符串文字的 C 空指针

c - 使为一个处理器编写的嵌入式 C 代码在另一个处理器上工作的条件是什么(当体系结构相同时)?

c - printf如何处理字符串

c++ - 如何声明对标准算法的引用?

c - 编辑链表中的节点

c - 打印第一位带零的数字

c++ - C++修改const指针引用值

c - 如何创建头节点