Можно ли элементам массива указателей на void присваивать адреса структур - C (СИ)
Формулировка задачи:
Здравствуйте, возникла проблема - создал структуру, одним из полей которой является массив указателей на void, массив нужен для создания связного списка, при записи в массив указателей на другие структуры проблем не возникает, но при попытке обращения к полям структур через эти указатели возникает ошибка компиляции:
kirill@kirill-X401A1:~/C/HTML parser > gcc -o test test.c -std=c99
test.c: In function ‘main’:
test.c:77:16: warning: dereferencing ‘void *’ pointer [enabled by default]
Html.links[i]->a = 12;
^
test.c:77:16: error: request for member ‘a’ in something not a structure or union
Указатель на void необходим т.к. заранее не известно с какой структурой будет осуществлена связь.
Возможно ли вместо массива использовать union, для достижения цели?
Пожалуйста подскажите как можно решить проблему.
Листинг программы
- struct html {
- int a;
- //struct head *links[LINKS];
- void *links[LINKS];
- };
- struct head {
- int a;
- void *links[LINKS];
- };
Листинг программы
- struct html Html;
- struct head Head;
- for (int i = 0; i < LINKS; i++) {
- Html.links[i] = (struct head *)&Head;
- Html.links[i]->a = 12; // ошибка
- }
Решение задачи: «Можно ли элементам массива указателей на void присваивать адреса структур»
textual
Листинг программы
- ( (struct head *)Html.links[i] )->a = 12;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д