Приведение указателя к типу void
скрывает истинный тип указателя от компилятора, так что вы можете привести его к любому другому типу, который вам нужен, и у компилятора не будет достаточно информации, чтобы знать, действителен ли он или нет, таким образом, это позволит это.
Без этого компилятор, как минимум, будет жаловаться, что вы пытаетесь привести указатель из одного типа в другой несовместимый тип.
ВАЖНОЕ ПРИМЕЧАНИЕ:
Оригинальный постер вопроса, на который вы ссылались, пытается сделать что-то опасное. Предполагается, что выравнивание структур в памяти будет одинаковым, что позволит им получить доступ к двум отдельным символам, как если бы они были одним массивом из двух символов. Это может быть правдой в теории и, вероятно, будет работать в небольшой тестовой программе, но если это будет сделано в части производственного кода, это обязательно закончится слезами и скрежетом зубов в 3 часа ночи. ∗1011*