non dans ce sens ça n'est pas un problème...
en fait l'idée c'est que ton pointeur a un type précis et que void* est juste le type de n'importe quel pointeur. (En termes techniques, char* par exemple est un
sous-type de void*, c'est-à-dire que c'en est un cas particulier.)
Donc si ta fonction demande un void* ça veut dire qu'elle accepte n'importe quel pointeur. Pas besoin de cast qui ne ferait que brouiller le code (en gênant la lecture voire en supprimant un warning qui aurait pu être utile, par exemple).
Inversement, si tu récupères un pointeur qui a le type void*, ça veut dire que le compilateur sait juste que c'est un pointeur mais pas quel est son type précis : tu lui donnes donc une information en castant ce pointeur vers un type plus précis, tu lui dis : je sais que ce pointeur est un char*. Si tu n'explicites pas le cast, il va essayer de deviner le vrai type précis du pointeur à partir de l'usage que tu en fais, mais c'est pas forcément très clair.
En règle générale, c'est vrai aussi dans d'autres langages, tu peux toujours donner une valeur d'un sous-type (plus spécifique) quand on te demande une valeur d'un super-type (plus général), c'est complètement transparent et ça ne peut pas provoquer d'erreur¹.
Par contre caster une valeur dont le type connu est très général vers un sous-type plus spécifique devrait toujours être explicité, parce que si tu te trompes de type ça peut provoquer une erreur et que le compilateur ne peut pas vérifier. (Par exemple un short* a normalement toujours une valeur paire, mais pour un void* ça n'est bien sûr pas garanti, donc si tu utilises un void* là où un short* est attendu il y a une possibilité d'erreur. Si tu laisses le compilo faire un cast implicite cette possibilité risque de passer inaperçue.)
¹sauf en java avec les arrays parce que la relation de sous-typage est bugguée, mais bon dans un langage normal je veux dire
