问题
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.
回答1:
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.
来源:https://stackoverflow.com/questions/13113301/how-void-pointer-arithmetic-is-happening-in-gcc