Лучше ли использовать пустой указатель или объединение для создания общего связанного списка в C? - PullRequest
0 голосов
/ 28 мая 2018

В качестве небольшого упражнения я попытался создать библиотеку для создания общего связанного списка в C. Я наткнулся на веб-сайт (https://www.geeksforgeeks.org/generic-linked-list-in-c-2/), который использовал указатель void для хранения данных в структуре. Моя первая идеябыло использовать структуру объединения для учета различных типов данных (int, char, pointers и т. д.), как это используется в этом ответе на другой вопрос, касающийся связанных списков с различными типами данных.

Теперь мне интересно, в чем заключаются конкретные преимущества использования указателя void или объединения, особенно с точки зрения производительности. А также, если действительно целесообразно использовать указатель void, поскольку наш профессор сказал нам, что мы не должны работать с указателем voidслишком часто, поскольку с ним очень трудно справиться (или это просто совет для неопытных учеников?).

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Когда мы говорим универсальный список в C, мы ожидаем, что он будет реализован с помощью указателей void.

Объединения не настолько универсальны.Вы говорите, что будете учитывать разные типы данных, вы ссылаетесь только на четыре из них, а затем говорите «и т. Д.».Это «и т. Д.» Скрывает много типов, и я уверен, что вы не будете определять объединение со всеми возможными типами, верно?должно быть действительно общим или нет.

0 голосов
/ 28 мая 2018

Это зависит от того, что вы делаете.Преимущество объединения состоит в том, что значение содержится в узле.Это означает, что вам не нужно иметь дело с дополнительным распределением.Недостатком является то, что вы можете хранить только такие большие вещи, как объединение.Если вы действительно пытаетесь сделать библиотеку гибкой, возможно, в какой-то момент вы захотите сохранить в ней структуру.В этом случае вам нужно использовать указатели (void).

...