Bill Cunningham said:
memset() takes as its first parameter a void* and that mean to pass any
type since void is the generic type with the & in front of it. And that's
how it's done.
Since you've shown *some* understanding here, I'll reply.
Rather than saying that void is the generic type (it really isn't),
it's better to say that void* is the generic pointer type.
Applying unary & to the name of an object gives you a pointer to that
object, which can be passed as an argument to a function with a
parameter of type void*.
The phrase "and that mean to pass any type since void is the generic
type with the & in front of it" is, to be blunt, a bit incoherent; I
can't tell from it whether you really understand or not, or if not,
what your remaining misconceptions might be.