我知道您不能对void指针使用指针算术,但是理论上您可以对指向void指针的指针进行指针算术,因为sizeof(void *)
会得出一个答案,即指针在系统上占用了多少字节?
答案 0 :(得分:9)
void*
是不完整的对象类型,因此不能在void
上使用指针算术。
来自C委员会N1570草案:
6.5.6加法运算符
...
2.另外,两个操作数均应为算术类型,或者一个操作数应为指向完整对象类型的指针,而另一个应为整数类型。
但是在void**
上允许使用,因为void*
不是不完整的对象类型。就像一个指向字符类型的指针。
6.2.5类型
...
19. 无效类型包含一组空值; 这是一个不完整的对象类型,无法完成。
...
28. 指向void的指针应具有与相同的表示和对齐要求 指向字符类型的指针。
答案 1 :(得分:6)
是的,指针算术适用于指向空指针(void**
)的指针。只有void*
是特殊的,void**
不是特殊的。
示例:
void *arrayOfVoidPtr[10];
void **second = &arrayOfVoidPtr[1];
void **fifth = second + 3; // pointer arithmetic