most of the programs make use of void * . First of all understand that, void * is a pointer type.. Its a pointer pointing to a UNKNOWN data type in your computer storage. you can type cast to any other pointer type.
void pointers can not be dereferenced
void pointers can take address assigned from any other pointer ( not true with function pointer) and can be reassigned to other pointer type.. This pointer is typically cast to a more specific pointer type before being used.. They act as place holder.
An example would be return value from malloc() family.. They return void pointers..
>>
void *malloc(size_t size);
void free(void *ptr);
void *calloc(size_t nmemb, size_t size);
void *realloc(void *ptr, size_t size);