程序不会按预期打印列表的值。它打印的东西必须是一个内存地址imo。我一直试图找到独奏解决方案,但到目前为止无济于事。我将不胜感激。
#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;
}
}
由于您的输入,上述问题已得到解决。非常感谢你!但是,出现了一个新问题。想要在列表中添加新元素,我添加了几行代码。不幸的是,没有打印想要的结果,程序突然终止。这是新代码:
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");
}
答案 0 :(得分:5)
请注意,您的函数void print_list(node_t * head);
需要node_t *
类型的参数,但您传递的类型node_t **
参数。
将print_list(&head);
更改为print_list(head);
head
的类型为node_t *
,而&head
的类型为node_t **
。
答案 1 :(得分:0)
将print_list(&head)
功能更改为print_list(head)
。
print_list(&head);
到
print_list(head);
function void print_list(node_t * head)
接受单个引用指针。但是您将**head
传递给print_list
函数。
答案 2 :(得分:0)
使用print_list
调用print_list(&head);
函数,但head已经是指向节点的指针。
这意味着print_list函数实际上正在接收指向节点指针的指针,或node_t **
。因此,当您尝试打印指针的值时,您将看到一些看似是内存地址的内容。要解决此问题,只需使用print_list(head);