void * 和 void ** 的区别

Difference between void * and void **

除了能够取消引用 void**,我不明白以下内容:

void * foo, **bar;
foo++;//error
bar++;//no error

为什么第一个不起作用而第二个起作用?有什么区别?

第一个片段

 foo++;//error

因为 foo 是指向 void 的指针并且您不能在 void * 上进行指针运算,所以未定义 void 类型的大小。

第二个片段,

 bar++;//no error

因为,bar 是一个指向 的指针,一个指向 void 的指针。因此,算术运算是允许的,因为指向指针类型的指针的大小是明确定义的。

FWIW,如果有时 void pointer arithmetic "works" without any error

,请不要感到惊讶