Additions and subtractions with pointers work with a pointed type size:
int* foo = 0x1000; foo++; // foo is now 0x1004 because sizeof(int) is 4
Semantically, the void size must be zero, because it does not represent anything. For this reason, pointer arithmetic on void pointers must be illegal.
However, for several reasons, sizeof(void) returns 1, and arithmetic works as if it were a char pointer. However, since this is semantically incorrect, you nevertheless receive a warning.
To suppress the warning, use char pointers.
source share