Q: Why can't I perform arithmetic on a void * pointer?
A: The compiler doesn't know the size of the pointed-to objects. (Remember that pointer arithmetic is always in terms of the pointed-to size; see also question 4.4.) Therefore, arithmetic on void *'s is disallowed (though some compilers allow it as an extension). Before performing arithmetic, convert the pointer either to char * or to the pointer type you're trying to manipulate (but see also questions 4.5 and 16.7).
ISO Sec. 188.8.131.52, Sec. 6.3.6
H&S Sec. 7.6.2 p. 204