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

时间:2012-10-28 21:43:06

标签: c pointers gcc 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);  
}  

在此计划中,p+1只是将p的值递增1.我知道void pointer arithmetic中无法C,因此GCC隐式执行此操作。如果是,则将其视为char pointer。另外,为什么dereferencing对于void指针是不可能的,如果它隐式地进行指针运算。

1 个答案:

答案 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的对象。