C 链表让我的大脑变得一团糟。我应该怎么做?

C 链表让我的大脑变得一团糟。我应该怎么做?,c,pointers,linked-list,pass-by-reference,C,Pointers,Linked List,Pass By Reference,我试图用链表来增强我对C语言中指针的了解。因此,我写了一个小例子,但当我编译它时,我发现一个错误,我似乎无法理解: In function 'append_node': error: request for member ‘next’ in something not a structure or union 通过引用访问(或传递)结构的正确方式是什么 #include <stdio.h> #include <stdlib.h> struct node { in

我试图用链表来增强我对C语言中指针的了解。因此,我写了一个小例子,但当我编译它时,我发现一个错误,我似乎无法理解:

In function 'append_node': 
error: request for member ‘next’ in something not a structure or union
通过引用访问(或传递)结构的正确方式是什么

#include <stdio.h>
#include <stdlib.h>

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

static int append_node(int val, struct node **head) {
  struct node *new_node;

  new_node = (struct node *) malloc(sizeof(struct node));
  new_node->val  = val;
  new_node->next = NULL

  *(head)->next = new;

  return 0;
}

int main() {
  int i;
  struct node *head;
  struct node *curr;

  head = NULL;
  curr = (struct node *) malloc(sizeof(struct node));

  for(i = 1; i <= 10; i++) {
      append_node(i, &curr);
      head = curr;
  }

  curr = head;
  while(curr) {
      printf("%d\n", curr->val);
      curr = curr->next ;
  }

  return 0;
}
#包括
#包括
结构节点{
int-val;
结构节点*下一步;
};
静态int-append_节点(int-val,结构节点**head){
结构节点*新节点;
新节点=(结构节点*)malloc(sizeof(结构节点));
新建节点->val=val;
新建节点->下一步=空
*(head)->next=新建;
返回0;
}
int main(){
int i;
结构节点*头部;
结构节点*curr;
head=NULL;
curr=(结构节点*)malloc(sizeof(结构节点));
对于(i=1;i val);
当前=当前->下一步;
}
返回0;
}

任何帮助都会很好

我可以假定您在这条线上得到了错误吗

  *(head)->next = new;
我认为你需要做一个小小的改变:

  (*head)->next = new;
因为
head
是指向指针的指针,所以当您取消引用它时,您会得到一个指针。下一个操作该指针。

有两个问题:

缺少一个

new->next = NULL
改变

*(head)->next = new;

请尝试以下方法:

(*head)->next = new_node;
**head
转到
*head
,然后召集成员。

对所有回复者:1)指向新节点的指针称为
new\u node
,而不是
new
。2) 通过将新节点分配给
(*head)->next
,列表的其余部分将被剔除(并泄漏):其想法是让新节点成为新的head,这就是为什么函数的参数是指向节点的双指针
(*head)->next = new_node;