RAM*_*PTA 2 c gcc pointers void-pointers pointer-arithmetic
int main()
{
int a;
void *p;
p = &a;
printf("%ld\n",(long)p);
p = p+1;
printf("%ld\n",(long)p);
}
Run Code Online (Sandbox Code Playgroud)
在这个程序中,p+1只是将p的值递增1.我知道void pointer arithmetic是不可能的C,所以GCC隐式地这样做.如果是的话,那就是它char pointer.另外,dereferencing如果void指针隐式执行指针运算,为什么不可能使用void指针.
C不允许使用void *指针类型进行指针运算.
GNU C允许它通过考虑规模voidIS 1.
从6.23关于void-和Function-Pointers的算术:
在GNU C中,指向void的指针和指向函数的指针都支持加法和减法操作.这是通过将空白或函数的大小视为1来完成的.
http://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html
现在回答这个问题:
另外,如果void指针隐式执行指针运算,为什么无法对空指针进行解引用.
GNU C允许指针算术,void *但仍然不允许void声明类型的对象.