“赋值从指针生成整数而没有强制转换”错误

时间:2014-02-12 17:09:01

标签: c

我正在从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时不断收到错误“赋值使得没有强制转换的指针生成整数”。我不知道如何解决这个错误。

2 个答案:

答案 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;