【问题标题】:Accessing struct from double pointer从双指针访问结构
【发布时间】:2015-06-05 03:45:07
【问题描述】:

我目前正在尝试在 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 应该可以工作?

【问题讨论】:

    标签: c pointers struct


    【解决方案1】:

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

    (*head)->prev = newNode;
    

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

    *(head->prev) = newNode;
    

    这不是你想要的。

    【讨论】:

      【解决方案2】:
      node ** head
      

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

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

      【讨论】:

        猜你喜欢
        • 2021-12-16
        • 1970-01-01
        • 2015-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-16
        • 1970-01-01
        相关资源
        最近更新 更多