繁体   English   中英

我可以在指针上使用指针算法来void指针吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM