我正在从Java迁移到C,我正在尝试设计一个链表。为了做到这一点,我创建了一个“节点”结构,它具有整数“val”属性和“dummy_element * next”属性,它只是指向下一个对象的指针。在程序的最开始,当它第一次开始运行时,内存中不应该存在任何节点,所以我创建了一个“Init_node()”函数,它创建了一个名为“first”的节点,并创建了两个外部指针“linked_head”和“linked_tail” “指向”第一个“节点。以下是相关代码:
typedef struct dummy_element {
int val;
struct dummy_element *next;
}node;
node *linked_head;
node *linked_tail;
node *traversal
void Init_node(){
node first;
first.val = NULL;
first.next = NULL;
linked_head = &first;
linked_tail = &first;
}
Init函数的重点是初始化一个空节点,只是指针有指向的东西。但是,我在first.val = NULL时不断收到错误“赋值使得没有强制转换的指针生成整数”。我不知道如何解决这个错误。
答案 0 :(得分:3)
您希望first.val = 0
代替NULL
。你应该保持first.next = NULL
这是正确的。
您将会遇到使用memset(&first, 0, sizeof first)
将结构归零的代码。虽然这通常也有效,但它有问题(当全0位并不意味着实际值为0时)。
/* Once the function ends linked_head will be invalid. */ linked_head = &first;
除了这一点,我必须警告你。您正在存储函数结束时将死亡的对象(first
)的地址。您可能希望使用malloc
来创建first
,如下所示:
node *first = malloc(sizeof *first);
if (!first) {
/* malloc failed, the process is in trouble. */
}
first->val = 0;
first->next = NULL;
linked_head = first;
答案 1 :(得分:1)
first.val
的类型为int
,但您指定的是NULL
,它是指针类型。将其更改为0
。
first.val = 0;