C &引用;赋值从指针生成整数,无需强制转换;错误
我正在从Java迁移到C,目前我正在尝试设计一个链表。为了做到这一点,我创建了一个“节点”结构,它有一个整数“val”属性和一个“dummy_element*next”属性,该属性只是指向下一个对象的指针。在程序刚开始运行时,内存中不应存在任何节点,因此我创建了一个“Init_node()”函数,该函数创建了一个名为“first”的节点,并使两个外部指针“linked_head”和“linked_tail”指向“first”节点。以下是相关代码:C &引用;赋值从指针生成整数,无需强制转换;错误,c,C,我正在从Java迁移到C,目前我正在尝试设计一个链表。为了做到这一点,我创建了一个“节点”结构,它有一个整数“val”属性和一个“dummy_element*next”属性,该属性只是指向下一个对象的指针。在程序刚开始运行时,内存中不应存在任何节点,因此我创建了一个“Init_node()”函数,该函数创建了一个名为“first”的节点,并使两个外部指针“linked_head”和“linked_tail”指向“first”节点。以下是相关代码: typedef struct dummy
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函数的全部作用是初始化一个空节点,这样指针就可以指向某个对象。然而,我一直在第一次遇到错误“赋值从指针生成整数而不进行强制转换”。val=NULL。我不知道如何避免这个错误 您想要
first.val=0
而不是NULL
。您应该先保留first.next=NULL
,这是正确的
最终,您将遇到使用memset(&first,0,sizeof first)
将结构归零的代码。虽然这通常也有效,但它也有问题(当所有位0并不意味着实际值为0时)
这不是重点,但我必须警告你。您正在存储一个对象的地址(
first
),该对象将在函数结束时消失。您可能希望使用malloc
来创建您的第一个
,如下所示:
node *first = malloc(sizeof *first);
if (!first) {
/* malloc failed, the process is in trouble. */
}
first->val = 0;
first->next = NULL;
linked_head = first;
您需要
first.val=0
而不是NULL
。您应该先保留first.next=NULL
,这是正确的
最终,您将遇到使用memset(&first,0,sizeof first)
将结构归零的代码。虽然这通常也有效,但它也有问题(当所有位0并不意味着实际值为0时)
这不是重点,但我必须警告你。您正在存储一个对象的地址(
first
),该对象将在函数结束时消失。您可能希望使用malloc
来创建您的第一个
,如下所示:
node *first = malloc(sizeof *first);
if (!first) {
/* malloc failed, the process is in trouble. */
}
first->val = 0;
first->next = NULL;
linked_head = first;
first.val
属于int
类型,但您正在为其赋值NULL
属于指针类型。将其更改为0
first.val = 0;
first.val
属于int
类型,但您正在为其赋值NULL
属于指针类型。将其更改为0
first.val = 0;