it is just a general pointer passing to the function, your function should know what is the actual type of the pointer - and cast it apropriatly before accessing the data.
It is mostly used in the Callbacks, when library is provided with CB address and some context address.
Library does not need to know the type of the data - so the pointer is stored as void* and supplied to the CB, when it is called from the library code
the CB - which is part of the application code - knows exactly what is the data type passed as a context and could cast the pointer accordingly