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。
,请不要感到惊讶
除了能够取消引用 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。
,请不要感到惊讶