Нет, они не совсем не связаны.void
- это тип, который ( C11 6.2.5p19 )
содержит пустой набор значений;это неполный тип объекта, который не может быть завершен.
И void *
- это тип указателя, который указывает на объект указанного типа.
Любой тип указателя объекта может бытьпреобразован в другой тип указателя объекта с явным приведением , учитывая, что указатель соответствующим образом выровнен;единственное преобразование между типами указателей, которое может произойти без приведения в C, - это преобразования в void *
и обратно;следовательно, статус void *
как тип общего указателя.
Тип void
сам по себе может использоваться для других задач - например, выражение может быть приведено к void
, чтобы сигнализировать, что значение находится в процессенамеренно игнорируется или используется как тип возвращаемого значения, чтобы сигнализировать, что функция не возвращает значение.Единственная семантическая перегрузка - использование void
в прототипе: int func(void)
, чтобы сигнализировать, что функция не принимает никаких аргументов.