is this valid
void *p = &X; /* some thing */ p += 12;
and if so what does p now point to? I have (third party) code that does this (an
Your guess is correct.
In the standard ISO C99, section 6.2.5 paragraph 26, it declares that void pointers and character pointers will have the same representation and alignment requirements (paraphrasing).