2014-02-12 113 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;