<div>Hola tengo la siguiente duda,</div>
<div> </div>
<div>Supongamos que tengo la siguiente funcion</div>
<div> </div>
<div>int prueba(void(*algo)(void*))</div>
<div>{</div>
<div>   int a=5;</div>
<div>   </div>
<div>   (*algo)(&a);</div>
<div>}</div>
<div>   </div>
<div>y por ejemplo esta otra</div>
<div> </div>
<div>void ejemplo(int * b)</div>
<div>{</div>
<div>    printf ("%i",*b);</div>
<div>}</div>
<div> </div>
<div>en el main invoco a prueba haciendo un cast:</div>
<div> </div>
<div>int main()</div>
<div>{</div>
<div>  prueba( (void(*)(void*))ejemplo);</div>
<div>}</div>
<div> </div>
<div>lo que no entiendo es por que todo funciona correctamente, es decir al hacer el cast el argumento de ejemplo  (de acuerdo a lo que tengo entendido) se convierte en un puntero void por lo cual el compilador me debería tirar error al intenetar imprimir el contenido de una varible apuntada por un puntero void, tal como ocurre en este ejemplo.</div>

<div> </div>
<div>void funcion(void* asd)</div>
<div>{</div>
<div>   printf("%i",*asd)</div>
<div>}</div>
<div>int main()</div>
<div>{</div>
<div>   int a=5;</div>
<div>   funcion(&a);</div>
<div>}</div>
<div>    </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>