从双指针访问结构

Accessing struct from double pointer

我目前正尝试在 C 中实现双向链表,但不了解如何从双指针访问结构。

这是我的简单结构:

typedef struct node {
  int val;
  struct node * next;
  struct node * prev;
} node;

这是一个简单的方法,我尝试将一个值推到列表的前面:

void push_front(node ** head, int newVal) 
{
  node * newNode = malloc(sizeof(node));

  newNode->val = newVal;
  newNode->next = head;

  *head->prev = newNode;

  *head = newNode;
}

然而,行*head->prev = newNode给我一个错误,说->prev的左边必须指向一个struct/union。我只是在学习 C,所以也许我忽略了一些非常简单的东西,但是 head 指针不是指向我的头节点的指针吗? *head 是指向我的头节点的指针。我认为这意味着 *head->prev 应该有效?

是的,head是指向你头节点指针的指针。因此,您可以通过以下方式访问 ->prev

(*head)->prev = newNode;

如果没有括号,C 的运算符优先级规则将您的语句解析为

*(head->prev) = newNode;

这不是你想要的。

node ** head

这里head是指针,(*head)是指针。 所以你需要访问像

这样的指针
(*head)->prev = newnode;