关于void指针的问题

Questions about void pointers

我有两个关于空指针的问题;我们有:

void * foo=malloc(99) 
void **bar=(void**)malloc(99);

int i=1;
bar++;
*bar = foo;

1.Is上面相当于下面的?

bar[i++] = foo;

如果是,那是意外的,因为bar++;向前移动双指针而不是单指针,这与非空类型不同。

2.Why 从 void * foo(); 到 return void** 可以吗?

例如:

 void * foo(){
     void ** bar;
     return bar;
 }

1.Is the above equivalent to the following?

bar[i++] = foo;

If yes it's unexpected because bar++; moves the double pointer forward and not single pointer, which is different from non void types.

很好,因为 bar 是指向指针数组的指针。 void* 的大小是已知的(它是指针的大小),因此您知道 void** 数组的下一个元素在哪里。

2.Why is it fine to return void** from a void * foo();?

因为void*是指向任何东西的指针。指向任何东西的指针就是指向任何东西的指针,所以 void** 可以隐式转换为 void*.