Can I do arithmetic on void * pointers in C?

c, void-pointers

Solution

It depends on compiler. Those that allow it consider sizeof(*(void *)) as 1.

EDIT: it's only for void pointer arithmetic. It would have no sense using in this case steps of sizeof(int) or of 0. The common expectations of someone who uses it would be the smallest possible step.

Problem

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 (and compiles cleanly) and my guess is that the void * was treated as a char *. My trusty K&R is silent(ish) on the topic EDIT: My little test app runs fine on gcc 4.1.1 and treats void * as char *. But g++ barfs I know how to do it properly. I need to know if I have to clean this code base to find all the places its done. BTW gcc -pedantic throws up a warning Summary: The C spec is ambiguous. It says that in terms of representation and use as function parameters void* =char*. But it is silent regarding pointer arithmetic. - gcc (4) permits it and treats it as char * - g++ refuses it - gcc -pedantic warns about it - vs2010 both c and c++ refuses it

Original source

Related problems