2013-03-15 119 views
2

我需要一些幫助來處理雙鏈表,其中一個節點的結構包含一個指向void的指針。如果我定義了另一個結構,我想要插入一個節點的實際數據,我該如何將它分配給無效的指針?另外,如何打印列表?我的節點如何在結構中分配一個空指針另一個結構?

結構,在頭文件中定義:

我想在每個節點插入數據,main.c中定義的
typedef struct nodetype 
{ 
    struct nodetype *prev, *next; 
    void *data; 
} NodeT; 

結構:

typedef struct dataStructure 
{ 
    int birthday; 
    char *name; 
} 
+0

你用來學習如何管理雙向鏈表的指針的參考文獻對如何分配內存或向指針分配內存沒有任何幫助。 *刻錄該書。*附註:您的'dataStructure'類型定義不合法。沒有與typedef關聯的關閉名稱。但是,'nodetype'看起來是正確的。 – WhozCraig 2013-03-15 19:42:15

+0

我忘了在dataStructure定義中添加「struct」。我提供的參考資料很短,並不全面。 – 2013-03-15 19:46:49

回答

3

您需要定義第二個typedef,例如

typedef struct dataStructure 
{ 
    int birthday; 
    char *name; 
} dataStructure; 

然後,一旦你分配/定義的結構,你可以在第一類型指針設置爲第二正常:

dataStructure mydatastruct; 
node->data = &mydatastruct; //(void *) can point to anything 

node->data = malloc(sizeof (dataStructure)); // direct allocation 

你」如果要通過節點結構訪問數據結構的成員,則需要將空指針投射到(dataStructure *),例如

((dataStructure *)node->data)->birthday = 1980; 

宏可以幫助使這個不那麼醜陋。

如果你的節點結構只會指向那個數據結構,那麼直接指向它會簡單得多,而不是使用void指針。

相關問題