C 作为函数参数的链表

C 作为函数参数的链表,c,pointers,linked-list,C,Pointers,Linked List,程序不会按预期打印列表的值。它打印的东西在我看来一定是一个内存地址。我一直试图单独找到解决方案,但到目前为止没有任何效果。我希望能得到一些帮助 #include <stdio.h> typedef struct node { int val; struct node * next; } node_t; void print_list(node_t * head); void main() { node_t * head = NULL; head

程序不会按预期打印列表的值。它打印的东西在我看来一定是一个内存地址。我一直试图单独找到解决方案,但到目前为止没有任何效果。我希望能得到一些帮助

#include <stdio.h>

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

void print_list(node_t * head);

void main()
{
    node_t * head = NULL;
    head = malloc(sizeof(node_t));
    if (head == NULL)
        return 1;
    head->val = 1;
    head->next = malloc(sizeof(node_t));
    head->next->val = 2;
    head->next->next = malloc(sizeof(node_t));
    head->next->next->val = 3;
    head->next->next->next = malloc(sizeof(node_t));
    head->next->next->next->val = 18;
    head->next->next->next->next = NULL;

    print_list(&head);
    system("pause");
}

void print_list(node_t * head) {
    node_t * current = head;

    while (current != NULL) {
        printf("%d\n", current->val);
        current = current->next;
    }
}

请注意,您的函数<代码>作废打印列表(节点头)需要类型为
node\t*
的参数,但您正在传递类型为
node\t**


更改
打印列表(&head)至<代码>打印列表(标题)


头部
属于
节点*
类型,而
头部
属于
节点**
类型

注意,您的函数
作废打印列表(node\t*head)
需要类型为
node\t*
的参数,但您正在传递类型为
node\t**


更改
打印列表(&head)至<代码>打印列表(标题)


头部
属于
节点*
类型,而
头部
属于
节点**
类型

将您的
打印列表(&head)
功能更改为
打印列表(head)


函数
void print\u list(节点头)
接受单个引用指针。但是您将
**head
传递到
打印列表
功能。

打印列表(&head)
功能更改为
打印列表(head)


函数
void print\u list(节点头)
接受单个引用指针。但是将
**head
传递到
打印列表
函数。

使用
打印列表(&head)调用
打印列表
函数,但head已经是指向节点的指针


这意味着print_list函数实际上正在接收指向节点指针的指针,或
节点**
。因此,当您尝试打印指针的值时,您将看到一些似乎是内存地址的内容。要解决这个问题,只需使用
print\u list(head)传入列表的头部

您的
打印列表
函数是使用
打印列表(&head)调用的,但head已经是指向节点的指针


这意味着print_list函数实际上正在接收指向节点指针的指针,或
节点**
。因此,当您尝试打印指针的值时,您将看到一些似乎是内存地址的内容。要解决这个问题,只需使用
print\u list(head)传入列表的头部

您的函数
print\u list
需要类型为
node\u t*
的参数,但您正在传递
node\u t**
。更改
打印列表(&head)至<代码>打印列表(标题)启用所有编译器警告并将警告视为错误。哦,就是这么简单。谢谢大家的帮助!我刚开始玩指针,所以有很多东西要学。你的函数
print\u list
需要一个
node\t*
类型的参数,但你正在传递
node\t**
。更改
打印列表(&head)至<代码>打印列表(标题)启用所有编译器警告并将警告视为错误。哦,就是这么简单。谢谢大家的帮助!我刚开始玩指针,所以有很多东西要学。
    head->next->next->next->next = malloc(sizeof(node_t));
    head->next->next->next->next->val = 5556;
    head->next->next->next->next->next = NULL;
    node_t * current = head;
    while (current->next != NULL) 
    {
        current = current->next;
    }
    current->next = malloc(sizeof(node_t));
    current->next->val = 32;
    current->next->next = NULL;
    printf("%d\n", current->next->val);
    system("pause");
}
print_list(&head);
print_list(head);