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

Hun*_*yer 5 c pointers

我知道你不能在void指针上使用指针算法,但理论上你可以对指向void指针的指针进行指针运算,因为它sizeof(void *)会产生指针在你的系统上占用多少字节的答案?

P.W*_*P.W 9

不允许使用指针运算,void*因为void它是不完整的对象类型.

来自C委员会草案N1570:

6.5.6加法运算符
...
2.对于加法,两个操作数都应具有算术类型,或者一个操作数应是指向完整对象类型的指针,另一个操作数应具有整数类型.

但它是允许的,void**因为void*它不是一个不完整的对象类型.它就像一个指向字符类型的指针.

6.2.5类型
...
19. void类型包含一组空值; 它是一个不完整的对象类型,无法完成.
...
28. 指向void的指针应具有与指向字符类型的指针相同的表示和对齐要求.


use*_*751 6

是的,指针算法适用于指向void指针(void**)的指针.只有void*特殊,void**不是.

例:

void *arrayOfVoidPtr[10];
void **second = &arrayOfVoidPtr[1];
void **fifth = second + 3; // pointer arithmetic
Run Code Online (Sandbox Code Playgroud)