int main()
{
int a;
void *p;
p = &a;
printf("%ld\n",(long)p);
p = p+1;
printf("%ld\n",(long)p);
}
在此计划中,p+1
只是将p的值递增1.我知道void pointer arithmetic
中无法C
,因此GCC
隐式执行此操作。如果是,则将其视为char pointer
。另外,为什么dereferencing
对于void指针是不可能的,如果它隐式地进行指针运算。
答案 0 :(得分:6)
C不允许使用void *
指针类型进行指针算法。
GNU C允许考虑void
的大小为1
。
从 6.23关于void-和Function-Pointers的算术:
在GNU C中,指向void的指针和指向函数的指针都支持加法和减法操作。这是通过将空白或函数的大小视为1来完成的。
http://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html
现在回答这个问题:
另外,如果无效指针是隐式执行指针运算的原因,为什么无法对空指针进行解除引用。
GNU C允许使用void *
进行指针运算,但仍然不允许声明类型为void
的对象。