从双指针访问struct

时间:2015-06-05 03:45:07

标签: c pointers struct

我目前正在尝试在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->prev应该有效吗?

2 个答案:

答案 0 :(得分:6)

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

(*head)->prev = newNode;

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

*(head->prev) = newNode;

这不是你想要的。

答案 1 :(得分:0)

node ** head

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

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