实现链表时指针的奇怪问题 [英] Odd problem with pointer while implementing a linked list
本文介绍了实现链表时指针的奇怪问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试在 C 中实现一个链表,并且我想将头节点存储在一个单独的结构中.但是,每当我添加另一个节点时,头节点似乎都会以某种方式重新分配.
I'm trying to implement a linked list in C, and I want to store the head node in a separate struct. However, it seems like the head node is being reassigned somehow whenever I add another node.
#include <stdio.h>
#include <stdlib.h>
struct BC_node {
struct BC_node *next;
void *data;
};
struct BC_list {
struct BC_node *head;
struct BC_node *tail;
};
void
BC_list_push(struct BC_list *list, void *data)
{
struct BC_node *node = calloc(1, sizeof(struct BC_node));
if (list->head != NULL)
printf("head: %d
", *((int *) (list->head)->data));
node->next = NULL;
node->data = data;
if (list->head == NULL) {
printf("head is null.
");
list->head = node;
}
if (list->tail != NULL) {
(list->tail)->next = node;
}
list->tail = node;
printf("head: %d
", *((int *) (list->head)->data));
}
int
main(void)
{
int i;
struct BC_list *list = calloc(1, sizeof(struct BC_list));
list->head = NULL;
list->tail = NULL;
for (i = 0; i < 3; i++)
BC_list_push(list, &i);
return 0;
}
输出:
head is null.
head: 0
head: 1
head: 1
head: 2
head: 2
推荐答案
你的 data
成员只是一个指向 main
变量 i
的指针>,因此当您打印 *data
时,您只会看到该轮循环中计数器的值.您所有的节点都具有相同的数据值!
Your data
member is just a pointer to the variable i
in main
, so when you print *data
you just see the value of the counter during that round of the loop. All your nodes have the same data value!
这篇关于实现链表时指针的奇怪问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文