如何在GCC中发生无效指针算术运算

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指针.

oua*_*uah 6

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声明类型的对象.