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);