我知道你不能在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
Run Code Online (Sandbox Code Playgroud)