2013-03-15 5 views
2

Мне нужна помощь в работе с Doubly Linked Lists, где структура узла содержит указатель на void. Если я определяю другую структуру, где я хочу вставить фактические данные узла, как назначить его указателю на void? Также, как распечатать список?Как назначить указателю пустоты в структуре другой структуры?

Структура моего узла, определенный в заголовочном файле:

typedef struct nodetype 
{ 
    struct nodetype *prev, *next; 
    void *data; 
} NodeT; 

Структура данных Я хочу, чтобы вставить в каждом узле, определенном в main.c:

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

Ссылка, которую вы используете для обучения указателям двойного = связанного списка, имеет * ничего * о том, как распределить память или назначить выделение указателю? * Запишите эту книгу. * Боковое примечание: определение типа 'dataStructure' не является законным. Нет закрывающего имени для связи с typedef. Однако 'nodetype' выглядит корректно. – WhozCraig

+0

Я забыл добавить «struct» в определении dataStructure. Ссылка, которую я предоставил, очень короткий и не исчерпывающий. –

ответ

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 

Вы» Вам нужно будет указать указатель void на (dataStructure *), если вы хотите получить доступ к элементам структуры данных через структуру узла, например

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

Макросы могут помочь сделать это менее уродливым.

Если ваша структура узла только будет указывать на эту структуру данных, было бы намного проще просто указать на нее напрямую, а не использовать указатель на пустоту.