создание связи между структурами с указателем void - PullRequest
0 голосов
/ 17 января 2020

Я хочу создать структуру типа связного списка / дерева со связями между узлами: void*.

struct node1{
  void* left;
  void* right;
}

struct node2{
 void* next; 
 int data;
}

int main(){

 struct node1* node1=malloc(sizeof(struct node1));
 struct node2* node2=malloc(sizeof(struct node2));
 node2->data=5;
 node1->left=*(struct node2*)node2);
 node1=node1->left

 }

Я хочу получить доступ к данным node2, используя node1 и его ссылки, но приведенный выше код не работает. Что не так?

1 Ответ

0 голосов
/ 17 января 2020

This:

 node1->left=*(struct node2*)node2);

Содержит синтаксическую ошибку и ненужное приведение. Он также разыменовывает значение node2, что делает его неправильным.

Это:

 node1=node1->left;

Также неправильно . Вы не можете назначить другой тип указателя на node1. Конечно, node1->left - это void*, так что на самом деле это допустимое присвоение само по себе, но это приведет к интерпретации node2 как типа struct node1*, что неверно.

Правильный код , если я правильно понял, что вы хотите сделать, было бы:

int main(void) {
    struct node1* node1 = malloc(sizeof(struct node1));
    struct node2* node2 = malloc(sizeof(struct node2));

    node2->data = 5;
    node1->left= node2;

    // Access node2->data from node1:
    ((struct node2*)node1->left)->data;

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...