int main()
{
int a;
void *p;
p = &a;
printf("%ld\n",(long)p);
p = p+1;
printf("%ld\n",(long)p);
}
In this program, p+1 is just incrementing the value of p by 1. I know void pointer arithmetic is not possible in C, so GCC is doing it implicitly. And if yes, then is it taking it as char pointer. Also, why dereferencing is not possible for void pointer, if it is implicitly doing pointer arithmetic.
C does not allow pointer arithmetic with void * pointer type.
GNU C allows it by considering the size of void is 1.
From 6.23 Arithmetic on void- and Function-Pointers:
In GNU C, addition and subtraction operations are supported on pointers to void and on pointers to functions. This is done by treating the size of a void or of a function as 1.
http://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html
Now to answer this question:
Also, why dereferencing is not possible for void pointer, if it is implicitly doing pointer arithmetic.
GNU C allows pointer arithmetic with void * but still does not allow an object of type void to be declared.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With