I would say the type deduction is failing you there. But why rely on that anyway, you may end up with wrong pointer types anyway. A better solution would be this:
void array_fill(void *arrayin, int arraylength, char elementvaluem int elementSize);
{
if(!arrayin || arraylength <= 0)
return;
memset(arrayin, bytevalue, elementSize * arraylength);
}
(You indentation is seriously trippy though. You may want to adopt indentation with tabs and alignment with spaces in the future so it looks universally consistent)