从双指针访问结构
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;
我目前正尝试在 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;