从双指针访问struct

Kev*_*vin 1 c struct pointers

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

这是我简单的结构:

typedef struct node {
int val;
struct node * next;
struct node * prev;
} node;
Run Code Online (Sandbox Code Playgroud)

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

void push_front(node ** head, int newVal) 
{
    node * newNode = malloc(sizeof(node));
    newNode->val = newVal;
    newNode->next = head;
    *head->prev = newNode;

    *head = newNode;
}
Run Code Online (Sandbox Code Playgroud)

但是,该行*head->prev = newNode给了我一个错误,说左边->prev必须指向a struct/union.我只是在学习C所以也许我忽略了一些非常简单的东西,但是不是指向我头节点指针的指针?并且*head是指向我的头节点的指针.我认为哪种方法*head->prev应该有效?

Gre*_*ill 6

是的,head是指向头节点指针的指针.所以你可以->prev这样做:

(*head)->prev = newNode;
Run Code Online (Sandbox Code Playgroud)

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

*(head->prev) = newNode;
Run Code Online (Sandbox Code Playgroud)

这不是你想要的.