2014-02-12 464 views
0

我正在从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。我不知道如何解决这个错误。

回答

1

first.valint类型,但要指定它NULL这是指针类型。将其更改为0

first.val = 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;