На самом деле, это «указатель на пустоту», который необходимо объяснить.
В языках программирования в целом и в C, в частности, нам нравятся типы. Типы - это базовая сеть безопасности, которая проверяет, делаем ли мы что-то глупое, где «глупый» означает «интерпретировать кучу битов за то, чем они не являются». Можно программировать без типов, некоторые языки полностью лишены любого типа (например, ассемблер или Forth), но это не для слабонервных, и, вообще говоря, производительность программиста, кажется, значительно повышается благодаря использованию типов .
Поэтому, когда у нас есть указатель, мы хотим, чтобы компьютер знал, что он может найти в конце указателя. Нам нужен «указатель на int», чтобы компьютер проверял, что когда мы смотрим на биты, которые находятся в конце указателя, мы рассматриваем их как «int», а не как что-то еще.
«Указатель на void» - это указатель без типа, который мы используем, когда система типов C не может захватить то, что мы делаем. Это признак того, что C не в состоянии понять сложность кода, который мы создаем (или, возможно, программист не был достаточно хорош, чтобы выразить то, что он делает в рамках ограничений системы типов C). Следовательно, хотя «void *» удобно в некоторых ситуациях, следует рассматривать его как исключение и стараться избегать его.