[英]Can I use pointer arithmetic on pointers to void pointers?
我知道你不能在void指针上使用指针算法,但理论上你可以对指向void指针的指针进行指针运算,因为sizeof(void *)
会产生指针在你的系统上占用多少字节的答案?
void*
上不允许使用指针算法,因为void
是一个不完整的对象类型。
来自C委员会草案N1570:
6.5.6加法运算符
...
2.另外,两个操作数都应具有算术类型,或者一个操作数应是指向完整对象类型的指针 , 另一个操作数应具有整数类型。
但它在void**
上是允许的,因为void*
不是一个不完整的对象类型。 它就像一个指向字符类型的指针。
6.2.5类型
...
19. void类型包含一组空值; 它是一个不完整的对象类型 ,无法完成。
...
28. 指向void的指针应具有与指向字符类型的指针相同的表示和对齐要求。
是的,指针算法适用于指向void指针的指针( void**
)。 只有void*
是特殊的, void**
不是。
例:
void *arrayOfVoidPtr[10];
void **second = &arrayOfVoidPtr[1];
void **fifth = second + 3; // pointer arithmetic
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.